Protobuf-net:正在更改反序列化System.Type的方式
本文关键字:System Type 方式 反序列化 Protobuf-net | 更新日期: 2023-09-27 18:24:21
目前我们定义了几个消息,其中包括System.Type字段/属性。protobuf-net处理System.Type的内置行为在很多情况下都很好,但在我们的情况下不可用:我们确实希望让类型序列化其全名,但需要控制按名称查找。
我找不到一个合适且有效的解决方案。一方面,有一个很好的答案解释了如何将System.Type的代理注册为System.Type,但不幸的是,它似乎不再起作用。参数异常被抛出"这种类型的数据具有内置行为,不能以这种方式添加到模型中:System.Type"。
另一方面,"TypeModel.DynamicTypeFormatting"事件似乎在以下情况下不会被调用:
[ProtoContract]
public class Foo { [ProtoMember] public List<Type> Types; }
目前有没有一种方法可以快速解决这个问题,而不需要我们提供带有快速修复程序的自定义版本?
原来我在错误的TypeModel实例上注册了DynamicTypeFormatting事件:
var model = TypeModel.Create();
model.DynamicTypeFormatting += Callback;
var compiledModel = model.Compile();
compiledModel.Deserialize();this is a completely different instance
不会起作用,因为我需要在"compiledModel"上注册回调。修复这个小错误最终使我能够自定义反序列化时执行类型查找的方式。