unity自带的JsonUtility,反序列化时,对象中的集合内不能包含枚举类型

最近在学习一门课,UI框架,遇到一个反序列化的问题,
笔者需求读取json中的配置文件,使用unity自带的fromjson方法,数据对象的结构如下:
在这里插入图片描述
经过一系列操作,反序列化获取到的list一直为null。。。
然后实在不知道咋回事了,巴拉巴拉,就是说,自定义的这个枚举类型UIPanelTYpe,是无法进行反序列化的。(可能是因为这门课太久了,老师整了三节课,才发现这个问题

好了,那就开始改造,在unity引擎内有一个接口叫做:ISerializationCallbackReceiver。
这个接口包含两个实现方法,
OnAfterDeserialize():在反序列化之后调用;
OnBeforeSerialize():在序列化之前调用。

OK,为了使用枚举类型,使PanelInfo继承至这个接口,再定义一个string类型的字段代替枚举,使枚举类型不能被序列化。然后在OnAfterDeserialize()内,把string类型转换为emum,赋值给UIPanelTYpe类型的字段。修改代码如下:

[Serializable]
public class UIPanelInfo
{
    public List<PanelInfo> PanelInfoList = new List<PanelInfo>();
}

[Serializable]
public class PanelInfo:ISerializationCallbackReceiver
{
    [NonSerialized]
    public UIPanelType PanelType;

    public string PanelTypelString;
    public string Path;

    public void OnAfterDeserialize()
    {
        UIPanelType type = (UIPanelType)Enum.Parse(typeof(UIPanelType),PanelTypelString);
        PanelType = type;
    }

    public void OnBeforeSerialize()
    {
        
    }
}

测试,完美解决,这样就能在序列化对象内使用枚举类型的字段咯。。。真是个很好的解决办法呢,所以还是不建议使用unity自带的这个方法,LitJson是个好工具,下次使用它,就能轻松点儿了!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值