2

我无法使用 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。我收到一些编码未设置错误。

谁能让我知道如何解决这个问题。谢谢。

4

2 回答 2

1

在当前的官方版本中,我不包括接口序列化支持。但是,我确实有一个补丁(来自另一个用户)似乎可以实现这一点。

我还没有将这个补丁应用到核心,只是因为我需要先专注于完成“v2”,然后再添加更多功能(特别是因为需要为 v2 完全重新实现该功能),但我很高兴如果您愿意,可以与您分享补丁。

或者:使用基类而不是接口。支持(通过[ProtoInclude] -但是,您MyClass1已经拥有父类的事实使事情变得有些复杂。


编辑:现在 v2 支持此功能。显然,代码必须了解预期的具体实现 - 但现在可以将包含附加到接口(或可选地在 vanilla POCO 模型的代码中指定)。

于 2010-09-24T09:47:57.187 回答
0

我的猜测是您需要添加:

[ProtoInclude(1, typeof(MyClass1))]
[ProtoInclude(2, typeof(MyClass2))]

对你来说MyClass1MyClass2因为你继承自MyInterface并且序列化不会知道类型。

于 2010-09-24T01:53:30.270 回答