C# protobuf-net:如何注释派生类型的属性?

C# protobuf-net:如何注释派生类型的属性?,c#,inheritance,serialization,protocol-buffers,protobuf-net,C#,Inheritance,Serialization,Protocol Buffers,Protobuf Net,对于最新版本的protobuf-net(r640文件夹),如何最好地注释派生类型的ProtoMember [ProtoBuf.ProtoContract(Name=@"MyBaseTypeProto")] [Serializable] public partial class MyBaseType: ProtoBuf.IExtensible { ... } [ProtoBuf.ProtoContract(

对于最新版本的
protobuf-net
r640
文件夹),如何最好地注释派生类型的
ProtoMember

[ProtoBuf.ProtoContract(Name=@"MyBaseTypeProto")]                                       
[Serializable]      
public partial class MyBaseType: ProtoBuf.IExtensible { ... }

[ProtoBuf.ProtoContract(Name=@"MyDerivedTypeProto")]                                        
[Serializable]      
public partial class MyDerivedType : MyBaseType, ProtoBuf.IExtensible { ... }

[ProtoBuf.ProtoContract(Name=@"MyMessageProto")]                                                
[Serializable]                                                                                  
public partial class MyMessage : ProtoBuf.IExtensible                                           
{                                                                                               
    [ProtoBuf.ProtoMember(1, IsRequired = false, Name = @"MyList", DataFormat = ProtoBuf.DataFormat.Default)]
    [System.ComponentModel.DefaultValue(null)]                                                  
    public List<MyDerivedType> MyList;  
但是
import
语句显然对生成的C#类(
.cs
文件)没有影响,只是添加了一条注释:

// Generated from: MyMessageProto.proto
// Note: requires additional types generated from: MyDerivedType.proto
[ProtoBuf.ProtoContract(Name=@“MyBaseTypeProto”)]
[ProtoBuf.ProtoInclude(typeof(MyDerivedType),somefieldnumberunquikeinsidemybasetype)]
公共部分类MyBaseType:ProtoBuf.IEExtensible{…}
[ProtoBuf.ProtoContract(Name=@“MyDerivedTypeProto”)]{…}
公共部分类MyDerivedType:MyBaseType,ProtoBuf.ieExtensible
[ProtoBuf.ProtoContract(Name=@“MyMessageProto”)]
公共部分类MyMessage:ProtoBuf.IExtensible
{                                                                                               
[ProtoBuf.ProtoMember(1,IsRequired=false,Name=@“MyList”,DataFormat=ProtoBuf.DataFormat.Default)]
[System.ComponentModel.DefaultValue(null)]
公开名单;

应该这样做(未经测试,不是由合适的计算机测试)。关键是在基类型上添加了
[ProtoInclude]
。我删除了
[Serializable]
因为protobuf net真的不关心这个问题。

谢谢Marc,但是有没有可能对
.proto
文件进行注释,以便
protogen.exe
自动生成
ProtoInclude
属性?@BaltoStar没有语法;但是,您可以将子类属性放在单独的目录中
部分
代码文件,因此无需编辑生成的文件
// Generated from: MyMessageProto.proto
// Note: requires additional types generated from: MyDerivedType.proto
[ProtoBuf.ProtoContract(Name=@"MyBaseTypeProto")]
[ProtoBuf.ProtoInclude(typeof(MyDerivedType), someFieldNumberUniqueInsideMyBaseType)]
public partial class MyBaseType: ProtoBuf.IExtensible { ... }

[ProtoBuf.ProtoContract(Name=@"MyDerivedTypeProto")] { ... }
public partial class MyDerivedType : MyBaseType, ProtoBuf.IExtensible

[ProtoBuf.ProtoContract(Name=@"MyMessageProto")]                                                                  
public partial class MyMessage : ProtoBuf.IExtensible                                           
{                                                                                               
    [ProtoBuf.ProtoMember(1, IsRequired = false, Name = @"MyList", DataFormat = ProtoBuf.DataFormat.Default)]
    [System.ComponentModel.DefaultValue(null)]                                                  
    public List<MyDerivedType> MyList;