protobuf-net报错:未为内部类类型定义序列化器 如何解决
问题原因
你代码的核心问题是作为自定义成员类型的内部类NestedData未添加[ProtoContract]序列化协定标识。
protobuf-net要求所有参与序列化的自定义类型(无论是否为嵌套类)都必须显式标注[ProtoContract]特性,序列化器才会为该类型生成对应的序列化/反序列化逻辑。你只给外层Data类添加了特性,内部的NestedData没有标注,因此序列化时找不到对应类型的处理器,抛出对应异常。
修正后的代码
[ProtoContract] public class Data { [ProtoMember(1)] public string Member { get; set; } [ProtoMember(2)] public NestedData Nested { get; set; } // 给内部类添加ProtoContract特性即可 [ProtoContract] public class NestedData { [ProtoMember(1)] public string InnerMember { get; set; } } }
补充说明
- 该问题和.NET版本、protobuf-net版本无关,属于使用规则类错误
- 内部类的访问修饰符不会影响序列化能力,只要标注了
[ProtoContract],非public的内部类也可以正常被序列化
内容的提问来源于stack exchange,提问作者Hermann.Gruber
相关产品推荐
相关产品推荐

