Protobuf网没有被告知序列化System.Object但仍然得到错误:没有为类型定义序列化程序:System.Object

时间:2016-05-11 17:45:29

标签: c# protocol-buffers protobuf-net

System.InvalidOperationException:{“无法为:SomeObject准备序列化程序 内部异常:{“没有为类型定义序列化程序:System.Object”}

我可以从代码中的其他内容中获取错误吗?我有很多我正在尝试序列化的课程,但我首先要测试更简单的课程,以确保我的程序能够正常工作。

非常重要:SomeObject是由其他类继承的(我只是在收到错误时序列化这个基类)

[ProtoContract]
[ProtoInclude(10, typeof(AnotherObject))]
[ProtoInclude(11, typeof(YetAgainObject))]
public class SomeObject {
    [ProtoMember(1)]
    String mName = "";
    [ProtoMember(2)]
    String mOwner = "";
    [ProtoMember(3)]
    String mDesc = "";
}

[ProtoContract]
public class AnotherObject : SomeObject{
    [ProtoMember(1)]
    public object[] someList{ get; set: }
}

...

1 个答案:

答案 0 :(得分:0)

在序列化原始对象的过程中,它会检查是否所有 ProtoInclude 语句。它还检查正确的序列化结构和质量!如果其中任何一个出现错误,它会在您尝试序列化的错误中引发错误,但它不会告诉您它来自哪一个,而是说您继承的类导致错误。

因此在执行大量类而不单独检查它们时需要 警告 。除了没有为序列化定义的对象之外的其他错误也是如此。

因此,我的错误发生在AnotherObject中,具体的解决方法是:

 [ProtoContract]
 public class AnotherObject : SomeObject{
     [ProtoMember(1, DynamicType = true)]
     public object[] someList{ get; set: }
 } 

因为你必须告诉它对象包含可序列化的东西(它会信任你)。