【Unity】使用放射对LitJson数据解析的一些想法


前言

在解析LitJson 需要明确告诉JsonData类型和成员名字,这些写在代码中感觉比较死板,如果修改成员名和类型,解析JsonData也要改十分的麻烦,所以尝试使用C#的反射方法进行动态解析。

一、C#反射是什么?

具体可以去官网查看:反射
反射提供描述程序集、模块和类型的对象(Type 类型)。

二、用到的函数

1.Type.GetFields()

获得当前结构体或类的所有字段。

2. FieldInfo类

作用:发现字段的属性并提供对字段元数据的访问权限。

FieldInfo.FieldType //获取此字段对象的类型。
FieldInfo.SetValue(Object, Object) //对象的字段值设置为给定值。
FieldInfo.Name //获取当前成员的名称。

三.使用

using System;
using System.Reflection;

假定一个结构体
public struct Item
{
	public int Num;
	public float _float;
}

public Item OnLoadJsonData()
{
	object DValue = "1";
	Item _item = new Item();
	FieldInfo[] fileInfos = typeof(Item).GetFields();	//得到结构体字段
	Object Oitem = _item;	//赋值的时候需要包装
	
	//因为通过GetFields() 得到的字段是无序的所以要进行小小的比对
	for(int i= 0;i<fileInfos.Length;i++)
	{
		for(int j =0;j<fileInfos.Length;j++)
		{
			if(fileInfos[i].Name == fileInfos[j].Name)
			{
				type _type = fileInfos[i].FieldType;
				object Value = Convert.ChangeType(DValue, type);
				fileInfos[i].SetValue(Oitem,Value);
			}
		}
	}
	//解包装
	_item = (Item)Oitem;
	return _item;
}

注意:如果结构体中有枚举类型,还需要进行区分。

//动态类型转换
Convert.ChangeType(Object, Type);

此函数无法进行枚举的类型转换,当然IConvertible 接口实现了,重写一个对枚举的类型转换。

总结

大概就这样了。
如果想泛型类的话,可以Item 换成 T,函数传一个类型参数进来进行判定,也是可以的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值