2

C# で MsgPack カスタム シリアライザーを使用する際に問題が発生しています。たとえば、次のクラスがあります。

public class A
{
    public int intA;
    public string strA;
    public B nestedB;
}
public class B
{
    public string strB;
    public int intB; 
} 

クラスAのカスタムデシリアライザーを作成しています。したがって、私のメソッドは次のようになります。

protected override A UnpackFromCore(Unpacker unpacker)
{
     int inta;
     unpacker.ReadInt32(out inta);
     string stra;
     unpacker.ReadString(out stra);
     B b = new B;
     // ??? How to get B from unpacker
     unpacker.?????(b);
}

プリミティブ型ではすべてうまくいきますが、アンパッカーからクラス B のインスタンスを抽出する方法は? Wiki のドキュメントは非常に貧弱であり、MessagePack C# の実装に関するインターネット上の情報はあまりありません。どんな種類の助けやアドバイスも大歓迎です。

4

1 に答える 1

1

これが私がこれまでに見つけたものです:

  • インスタンスをシリアライズする前に、MsgPack はインスタンス フィールドの数をシリアライズします。
  • その後、DataMember または MessagePackMember 属性でマークされていない場合、すべてのフィールドはデフォルトでアルファベット順にシリアル化されます (それ以外の場合は、それぞれ order または id 属性プロパティによって並べ替えられます)。
  • 残念ながら、IsCollectionHeader、IsArrayHeader、IsMapHeader などのすべての属性が false に設定されているため、フィールド数を保持するこのデータを特定するのに役立つものは何も見つかりませんでした。

したがって、これはまだ不明です。

実際にはこれを深く掘り下げる必要はないので、この問題は解決済みと考えています。多分私の答えは他の誰かに役立つかもしれません。

于 2013-11-21T10:47:24.637 に答える