You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:09:04