ET版本:ET-EUI 6月7.2版本
Unity版本:2021.3.6f1c1
Net版
本:7.0.302
问题简述:
有如下代码:
...
unit.GetComponent<NumericComponent>().AddOrUpdateUnitCache().Coroutine();
...
public static async ETTask AddOrUpdateUnitCache<T>(this T self) where T : Entity, IUnitCache
{
...
Log.Debug($"===== Deserialize 1 ===== {MongoHelper.Deserialize<Entity>(self.ToBson())}");
Log.Debug($"===== Deserialize 2 ===== {MongoHelper.Deserialize<Entity>(MongoHelper.Serialize(self))}");
...
}
- 注意到这里使用了两种序列化方法
- 观察Log发现,两种方法输出了不同的反序列化结果,其中,第一种方法丢失了 numericComponent 的类型信息,如下所示:
2023-08-23 22:16:10.3314 (UnitCacheHelper.cs:27) ===== Deserialize 1 ===== { "_t" : "Entity", "_id" : 1975011367849099264 }
2023-08-23 22:16:10.3314 (UnitCacheHelper.cs:28) ===== Deserialize 2 ===== { "_t" : "NumericComponent", "_id" : 1975011367849099264, "NumericDic" : [[1001, 1], [1002, 100], [3001, 200], [3002, 1010]] }
- 看了一下 MongoHelper.Serialize 方法,发现只是对 ToBson 的一个封装;MongoHelper本体大略看了一下,没有很明白:
public static byte[] Serialize(object obj)
{
return obj.ToBson();
}
- 难道这个 object 是关键?
- 是否所有的序列化都应当使用 MongoHelper.Serialize 方法?但我又发现 entity.ToBson() 其实可以保留类型信息,难道因为是 self ,所以不能直接调用 ToBson ?0-0
- 另外还有一个疑问是,为什么 Unit.ToBson() 后,反序列化时必须指明 Unit 类型?如Demo 的 M2M_UnitTransferRequestHandler 中第12行单独对unit做了反序列化:
MongoHelper.Deserialize<Unit>(unit.ToBson())
- 我在别处传送unit时,也发现unit的反序列化必须指定类型。
- 恳求解惑或指明一个方向……拜谢拜谢!QAQ!
- 悬赏50R,可留支付宝号…