Protobuf-net:更改System.Type反序列化的方式

时间:2014-09-25 15:02:38

标签: c# protobuf-net

目前,我们定义了几个包含System.Type字段/属性的消息。 protobuf-net处理System.Type的内置行为在很多情况下都很好,但在我们的情况下无法使用:我们确实希望类型序列化其全名,但需要按名称控制查找。

我无法为此找到合适且有效的解决方案。一方面,有excellent answer解释了如何为System.Type注册代理,但不幸的是,它似乎不再起作用,因为抛出了System.Argument异常“这类数据有内置行为,无法以这种方式添加到模型中:System.Type“。

另一方面,存在“TypeModel.DynamicTypeFormatting”事件,在以下情况下似乎不会调用该事件:

[ProtoContract]
public class Foo { [ProtoMember] public List<Type> Types; }

目前是否有办法快速解决此问题,而无需发送带有quickfix的自定义版本?

1 个答案:

答案 0 :(得分:0)

结果我在错误的TypeModel实例上注册了DynamicTypeFormatting事件:

var model = TypeModel.Create();
model.DynamicTypeFormatting += Callback;
var compiledModel = model.Compile();
compiledModel.Deserialize();this is a completely different instance

不会工作,因为我需要在&#39; compiledModel&#39;上注册回调。代替。修复这个小错误最终允许我自定义反序列化时执行类型查找的方式。