【发布时间】:2012-02-21 13:20:26
【问题描述】:
我正在尝试使用出色的 Protobuf-NET 序列化模型。我不能使用属性(在编译时对象是未知的),所以我构建了一个 TypeModel。 我的对象模型由一个类TestDataObject组成,这个类有一个ITestDataExtension的属性。抽象基类 TestDataExtensionBase 实现了这个接口 TestDataExtension 类(代码中的 myDataObjectExtA)继承自这个基类。
我的 TypeModel 是这样构造的:
System.IO.MemoryStream tmpMemoryStream = new System.IO.MemoryStream();
RuntimeTypeModel model = TypeModel.Create();
MetaType basetype = model.Add(typeof(TestDataObject), true);
MetaType interfaceType = model.Add(typeof(ITestDataExtension), true);
//MetaType extBaseType = interfaceType.AddSubType(100, typeof(TestDataExtensionBase));
MetaType extType = interfaceType.AddSubType(200, myDataObjectExtA.GetType());
model.Add(typeof(TestDataExtensionBase), true);
model.Add(myDataObjectA.Ext.GetType(), true);
model.CompileInPlace();
model.Serialize(tmpMemoryStream, myDataObjectA);
byte[] tmpDat = tmpMemoryStream.ToArray();
如果我运行以下命令,则基类的属性未序列化,我需要对它们进行序列化。
在我看来,我应该像这样为 TestDataExtensionBase 添加一个子类型:
MetaType extBaseType = interfaceType.AddSubType(100, typeof(TestDataExtensionBase));
MetaType extType = extBaseType.AddSubType(200, myDataObjectExtA.GetType());
但这会导致:意外的子类型:TestDataExtension。 有谁知道我做错了什么?任何帮助将不胜感激。
【问题讨论】:
标签: c# .net protocol-buffers protobuf-net