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;