protobuf では、protobuf は番号ベースであるため (名前を送信しないため)、型の各メンバーには識別番号が必要です。そのため、トリックは単純です。使用する数値を指定します。例えば:
class Customer {
public int Id {get;set;}
public string Name {get;set;}
}
このためのコントラクトを指定する最も簡単な方法は次のとおりです。
RuntimeTypeModel.Default.Add(typeof(Customer), false).Add("Id", "Name");
Id
これは1 と2に関連付けられName
ます。属性を使用する場合、非属性 API で実際に公開する必要がある組み込みの「自分で理解する」コードがいくつかあります。次のようなものです。
- すべてのパブリック フィールドとプロパティをアルファベット順にシリアル化します
- すべてのフィールド (パブリックまたは非パブリック) をアルファベット順にシリアル化します
ただし、これらはどちらもリフレクションで行うのは非常に簡単です。どちらの場合でも、ある時点で型が変更される可能性がある場合、リフレクションを使用すると問題が発生する可能性があることに注意してください。
役立つ可能性があり、詳細情報を提供できる追加機能:
- 型ファクトリを (グローバルまたはインスタンスごとに) 指定できます。これは、値を事前に設定したり、利用可能なオブジェクトのプールを使用したりするのに役立ちます。
- サロゲート型は複雑なシナリオのために書くことができます - これはほとんどのモデルが正常に動作する場合に役立ちますが、1 つの型が難解すぎてシリアライゼーションに適していません - しかし、変換コードを書くことができる別のレイアウトを考案することができます両方向
- 「タプル」のように見える多くのものは、デフォルトで処理されます。特に、それがパブリックに不変であり、すべてのパブリック メンバーに一致するパラメーターを受け入れるコンストラクターがある場合、指定された順序でメンバーをシリアル化すると想定されます。コンストラクタ