问题
先放两排代码,再描述问题(以下代码均是客户端代码)
// 需要做反序列化的类,没有继承任何东西,纯热更代码
public class A {...}
// 反序列化方式1, 会报错
JsonHelper.FromJson<A>(data)
// 反序列化方式2,能正常执行
LitJson.JsonMapper.ToObject<A>(data)
今天发现客户端ilruntime执行JsonHelper.FromJson<xxx>(xxx)会报错,但是LitJson.JsonMapper.ToObject<xxx>(xxx)却能正常运行
非常疑惑,以下给出JsonHelper在客户端的定义(来自ET源码)
public static T FromJson<T>(string json)
{
#if NOT_UNITY
return MongoDB.Bson.Serialization.BsonSerializer.Deserialize<T>(json);
#else
return LitJson.JsonMapper.ToObject<T>(json);
#endif
}
可以看到这俩其实是一样的东西啊,在客户端约等于套壳一次
顺带一提ToJson没有出现任何问题,只是反序列化有这个离谱的现象
以下补充出现错误时候的输出(我不太明白为什么它会在分析绑定后被解析成ILTypeInstance
,这是分析自动生成的代码,如果不进行CLR分析,那么它的报错就指向试图反序列化的类),
System.MissingMethodException: Default constructor not found for type ILRuntime.Runtime.Intepreter.ILTypeInstance
这是真的给我整蒙了,有没有大佬可以分析一波
题外话
所以最后被迫写了很抽象的代码
public void FromJson(string json)
{
#if NOT_UNITY
m_Data = JsonHelper.FromJson<PlayerAvatarData>(json);
#else
m_Data = LitJson.JsonMapper.ToObject<PlayerAvatarData>(json);
#endif
IsDirty = true;
}