2017-11-13 17 views
1

私は、特定の値 "key"を除いて直列化したいクラスを持っています。それはどのクラスがそれを逆シリアル化するのかを特定するために使われます。シリアル化されたバッファにprotobuf.netでシリアル化せずに変数を追加する

今、私はそれを手動で行うことができるが、私はシリアライズ/デシリアライズ処理するクラスを作って、私は可能な限り一般的なようにそれを作りたかった、ということを理解しています。

例コードIはアイデンティティがストリームに含まれるが、連載ではないことにしたい

[ProtoContract] 
public class GeneralPacket 
{ 
    public uint Identity; 
    [ProtoMember(1, IsRequired = true)] 
    public uint Arg1; 
    [ProtoMember(2, IsRequired = true)] 
    public uint Arg2; 
    [ProtoMember(3, IsRequired = true)] 
    public uint Arg3; 
} 

答えて

1

"ディスクリミネータ"が必要なようです。 Protobuf-netは現在、特に非直列化側でそれをサポートするコードを持っていません(単に余分な値を書くのは簡単です:読み込み時にハードビットがそれを利用しています)。サポートは何いるProtobufネットあるんシリアライズ数字キーを指定し、タイプリゾルバを提供するために、できるようにSerializeWithLengthPrefix経由

  • 共通の祖先を持つ様々な継承のシナリオとキー付きのサブタイプ
  • マニュアルの使用(キーからタイプへ)

強力なディスクリミネーターサポートのための良いユースケースがある場合、私はそれを考慮してうれしいが、それは今日存在しない。私は、使用目的の例を見て、実装の結果について考える必要があります。

関連する問題