2016-10-03 151 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; 

} 

我使用MsgPack.CLI嘗試反序列化所看到here

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

,然後用

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

運行它,不幸的是MI2就像是一個新創建的信息,並且不包含任何從MsgPacket數據。如果有人對如何實現這一目標有所瞭解,這將非常棒。

非常感謝!

更新

我做了一個假信息,並試圖模仿類似於上面的數據進行處理和序列化它自己。我得到的首先是前面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; 
...