C#/MsgPack.CLI:反序列化顺序
C# / MsgPack.CLI: Order of deserialization
我正在尝试反序列化字节数组中的 MsgPack 数据包,如下所示:
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 to try to deserialize it as seen 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),这是有道理的,我忘记了,而且元素的顺序也不同。
看来它们是按字母顺序排列的!有没有办法 map/deserialize 它们就像它们在 class 中的顺序一样,或者我是否必须将我的字段名称更改为 awX、bwY、cwMXCount ...是否有某个地方的标志来反序列化它们以特定方式?
已修复!为了将来参考,这是如何:
显然没有排序标准,所以我不得不手动设置字段的顺序。这解决了我所有的问题:
public class Info
{
[MessagePackMember(0)]
public byte wX;
[MessagePackMember(1)]
public byte wY;
[MessagePackMember(2)]
public Int16 wMXCount;
...
我正在尝试反序列化字节数组中的 MsgPack 数据包,如下所示:
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 to try to deserialize it as seen 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),这是有道理的,我忘记了,而且元素的顺序也不同。
看来它们是按字母顺序排列的!有没有办法 map/deserialize 它们就像它们在 class 中的顺序一样,或者我是否必须将我的字段名称更改为 awX、bwY、cwMXCount ...是否有某个地方的标志来反序列化它们以特定方式?
已修复!为了将来参考,这是如何: 显然没有排序标准,所以我不得不手动设置字段的顺序。这解决了我所有的问题:
public class Info
{
[MessagePackMember(0)]
public byte wX;
[MessagePackMember(1)]
public byte wY;
[MessagePackMember(2)]
public Int16 wMXCount;
...