2016-09-30 13 views
1

protobuf-netr640フォルダ)の最新バージョンについては、派生型であるProtoMemberにどのように注釈を付けるのが最適でしょうか?protobuf-net:派生型のプロパティに注釈を付ける方法は?

[ProtoBuf.ProtoContract([email protected]"MyBaseTypeProto")]          
[Serializable]  
public partial class MyBaseType: ProtoBuf.IExtensible { ... } 

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

[ProtoBuf.ProtoContract([email protected]"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; 

私はProtoMember属性にDynamicTypeプロパティを追加しようとしましたが、それが認識されていません。

xml defsからproto typesのクラスを生成できる解決策が必要です。理想的には、これはプロパティ定義に注釈された属性を介して行われます。

package MyPackage;               

import "MyDerivedTypeProto.proto";               

message MyMessage{                   
    repeated MyDerivedType MyList = 1;               
}  

しかし import文は明らかに(生成されたC#クラスには影響しません:

import文が含まれたメッセージ型DEFS(.protoファイル)に基づいてクラスを生成するためにprotogen.exeを使用することが可能と思われますコメントを追加する以外.csファイル):

// Generated from: MyMessageProto.proto 
// Note: requires additional types generated from: MyDerivedType.proto 

答えて

1
[ProtoBuf.ProtoContract([email protected]"MyBaseTypeProto")] 
[ProtoBuf.ProtoInclude(typeof(MyDerivedType), someFieldNumberUniqueInsideMyBaseType)] 
public partial class MyBaseType: ProtoBuf.IExtensible { ... } 

[ProtoBuf.ProtoContract([email protected]"MyDerivedTypeProto")] { ... } 
public partial class MyDerivedType : MyBaseType, ProtoBuf.IExtensible 

[ProtoBuf.ProtoContract([email protected]"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; 

それを行う必要があります(テストされていない、適切なコンピュータではありません)。キーの追加はベースタイプの[ProtoInclude]です。 protobuf-netが本当に気にしないので、私は[Serializable]を削除しました。

+0

Marcに感謝しますが、 'protogen.exe'が自動的に' ProtoInclude'属性を生成するように '.proto'ファイルに何らかの形で注釈を付けることは可能ですか? – BaltoStar

+0

@BaltoStarいいえ、そのための構文はありません。しかし、サブクラス属性を別々の 'partial'コードファイルに入れることができるので、生成されたものを編集する必要はありません –

関連する問題