我无法使用protobuf-net序列化我的类,问题似乎是protobuf-net无法序列化接口。
interface MyInterface
{
string name;
}
[ProtoContract]
[ProtoInclude(1, typeof(MyClass1))]
[ProtoInclude(2, typeof(MyClass2))]
public abstract class ParentClass
{
[ProtoMember(1)]
List<MyInterface> elements;
}
[ProtoContract]
public class MyClass1 : ParentClass, MyInterface
{
[ProtoMember(1)]
int x;
}
[ProtoContract]
public class MyClass2 : MyInterface
{
[ProtoMember(1)]
string y;
}
我无法序列化MyClass1类型的任何对象,因为元素是接口列表,可以是Mylass1或MyClass2。我得到一些编码没有设置错误。
任何人都可以告诉我如何解决这个问题。感谢。
答案 0 :(得分:1)
在当前的官方版本中,我不包括界面序列化支持。但是,我确实有一个补丁(来自其他用户)似乎启用了这个。
我还没有将这个补丁应用到核心,只是因为我需要在添加更多功能之前首先关注完成“v2”(特别是因为该功能需要完全重新为v2实施,但如果您愿意,我很乐意与您分享补丁。
或者:使用基类而不是接口。支持 (通过[ProtoInclude]
) - 但是,您的MyClass1
已经拥有父类的事实会使问题复杂化。
编辑:v2现在支持此功能。代码必须知道预期的具体实现,显然 - 但现在可以附加到接口(或者在代码中为vanilla POCO模型指定)。
答案 1 :(得分:0)
我的猜测是你需要添加:
[ProtoInclude(1, typeof(MyClass1))]
[ProtoInclude(2, typeof(MyClass2))]
到MyClass1
和MyClass2
,因为您从MyInterface
继承而且序列化不知道类型。