2016-10-03 15 views
0

私は私はこのようなバイト配列を持っているMsgPackパケットデシリアライズしようとしています:C#/ MsgPack.CLI:直列化復元の順序

47 52 209 0 144 209 0 144 72 86 54 195 209 66 73 

をそして、私はこのタイプのオブジェクトにそれを取得したいです:

public class Info 
{ 
    public byte wX; 
    public byte wY; 
    public Int16 wMXCount; 
    public Int16 wMYCount; 
    public byte wMZCount; 
    public byte wMRegionZ; 
    public byte wZ; 

    public bool m; 
    public Int16 tkn; 

} 

私はhere見られるように、それをデシリアライズしようとするMsgPack.CLIを使用しています。

static public T Deserialize<T>(byte[] bytes) 
{ 
    var serializer = MessagePackSerializer.Get<T>(); 
    using (var byteStream = new MemoryStream(bytes)) 
    { 
     return serializer.Unpack(byteStream); 
    } 
} 

、その後、残念ながらMI2はちょうど新しく作成された情報のようなもので、MsgPacketからのデータのいずれかが含まれていません

Info mi2; 
mi2 = Deserialize<Info>(bytes); //bytes is the byte array that contains the MsgPack 

でそれを実行します。誰かがこれをどうやって稼働させるかというアイディアを持っているのなら、本当に素晴らしいだろう。

ありがとうございます!

アップデートは、私はダミー情報を作り、上記のデータのようなものと、それを自分自身をシリアライズをエミュレートしようとしました。私が得たのはまず最初に153の正面(9要素の固定配列のID)ですが、それは忘れていましたが、要素も別の順序になっています。

アルファベット順に表示されています。彼らがクラスで注文されたようにマップ/デシリアライズする方法はありますか?フィールドの名前をawX、bwY、cwMXCountに変更する必要がありますか...特定の方法でデシリアライズするフラグがありますか?

+0

よく書かれた最初の質問。しかし、その中に答えを入れるように編集するのではなく、[自分の質問に答える]方がいいです(http://stackoverflow.com/help/self-answer)。そうすれば、他の読者は問題が解決したことをすぐに知ることができます。 – dbc

+0

@dbcありがとうございました。自分のクエストに答えることができなかったことが分かり、 "解決された"ボタンを探していました。私は今すぐ答えを提出し、できるだけ早くそれを解決策としてマークします – Lucahk

答えて

1

修正済み!今後の参考として、これは次のようになります。 注文の基準がないので、手動でフィールドの注文を設定する必要がありました。これは私のすべての問題を解決しました:

public class Info 
{ 
    [MessagePackMember(0)] 
    public byte wX; 
    [MessagePackMember(1)] 
    public byte wY; 
    [MessagePackMember(2)] 
    public Int16 wMXCount; 
... 
関連する問題