2016-10-03 4 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. Было бы здорово, если бы у кого-то было представление о том, как это сделать.

Большое спасибо!

Update

Я сделал фиктивный Info и пытался подражать что-то похожее на данных выше и сериализации сам. То, что я получаю, это прежде всего 153 спереди (id для фиксированного массива с 9 элементами), что имеет смысл, я забыл об этом, но и элементы находятся в другом порядке.

похоже, что они в алфавитном порядке! Есть ли способ отображать/десериализовать их, как они упорядочены в классе, или мне нужно изменить имена моих полей на 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; 
... 

 Смежные вопросы

  • Нет связанных вопросов^_^