我正在使用protobuf-net 2.0.0.640版本来序列化一些数据,如下所示。
现在,如果我通过代码在“ITestMessage”和“MyOrder”之间声明了继承依赖关系:
尝试反序列化之前保存的数据时,我遇到了以下错误: “找不到ITestMessage的无参构造函数”。
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public interface ITestMessage
{
}
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class MyOrder : ITestMessage
{
public int Amount { get; set; }
}
[ProtoContract(ImplicitFields = ImplicitFields.AllFields)]
public class MyOrderWrapper
{
public MyOrder Order { get; set; }
}
[TestMethod]
public void TestOrderSerialize()
{
var order = new MyOrder() {Amount = 10};
var orderWrapper = new MyOrderWrapper() { Order = order };
using (var file = File.Create("C:\\temp\\order.bin"))
{
Serializer.Serialize<MyOrderWrapper>(file, orderWrapper);
}
}
现在,如果我通过代码在“ITestMessage”和“MyOrder”之间声明了继承依赖关系:
RuntimeTypeModel.Default[typeof(ITestMessage)].AddSubType(2, typeof(MyOrder));
尝试反序列化之前保存的数据时,我遇到了以下错误: “找不到ITestMessage的无参构造函数”。
[TestMethod]
public void TestOrderDeserialize()
{
RuntimeTypeModel.Default[typeof(ITestMessage)].AddSubType(2, typeof(MyOrder));
MyOrderWrapper orderWrapper;
using (var file = File.OpenRead("C:\\temp\\order.bin"))
{
orderWrapper = Serializer.Deserialize<MyOrderWrapper>(file);
}
}
请问为什么在继承层次结构中'MyOrderWrapper'没有引用比'MyOrder'更高的任何内容时会出现这种情况?
此外,为什么当我在'ITestMessage'上明确包含'[ProtoInclude(2, typeof(MyOrder))]时它能够正常工作?
谢谢