如何使用 RuntimeTypeModel 将 ProtoInclude 与 protobuf-net 中的类型相关联?
Posted
技术标签:
【中文标题】如何使用 RuntimeTypeModel 将 ProtoInclude 与 protobuf-net 中的类型相关联?【英文标题】:How RuntimeTypeModel can be used to associate ProtoInclude with a type in protobuf-net? 【发布时间】:2011-05-22 12:41:51 【问题描述】:据我了解,RuntimeTypeModel 允许将 ProtoInclude 与类型相关联,这对于无法更改类型声明的情况很有用。但我很难理解它实际上是如何完成的。
有例子吗?
谢谢。
【问题讨论】:
【参考方案1】:AddSubType()
用于指定派生类型及其标识符;例如(full code):
static RuntimeTypeModel CreateModel()
var model = TypeModel.Create();
model[typeof(NotInvolved)].Add(1, "D");
model[typeof(SomeBase)]
.Add(1, "A")
.AddSubType(2, typeof(SomeDerived))
.AddSubType(3, typeof(AnotherDerived));
model[typeof(SomeDerived)].Add(1, "B");
model[typeof(AnotherDerived)].Add(1, "C");
model[typeof(AlsoNotInvolved)].Add(1, "E");
return model;
以上在运行时配置了整个类型模型,但您也可以在自动(通过属性)和显式(通过代码)之间混合搭配。
【讨论】:
+1 @Marc Gravell:那么我们应该从那里使用 model.Serialize 和 model.Deserialize 而不是 ProtoBuf.Serializer.De/serialize以上是关于如何使用 RuntimeTypeModel 将 ProtoInclude 与 protobuf-net 中的类型相关联?的主要内容,如果未能解决你的问题,请参考以下文章
将 protobuf-net RuntimeTypeModel 编译为 C#,而不是 DLL
从 protobuf-net 中的自定义 RuntimeTypeModel 生成 .proto 文件
Protobuf-net RuntimeTypeModel 不序列化基类的成员