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 文档很差,Internet 上关于 MessagePack C# 实现的信息也不多。任何帮助或建议将不胜感激。

4

1 回答 1

1

这是我到目前为止发现的:

  • 在序列化一个实例之前,MsgPack 会序列化实例字段的个数;
  • 之后所有字段默认按字母顺序排列,如果没有标注 DataMember 或 MessagePackMember 属性(否则分别按 order 或 id 属性排序);
  • 不幸的是,我没有找到任何可以帮助确定包含字段数量的数据的任何东西,因为其上的所有属性(如 IsCollectionHeader、IsArrayHeader、IsMapHeader)都设置为 false;

所以这个还不清楚。

其实我没有必要深入挖掘,所以我认为这个问题已经解决了。也许我的回答可能对其他人有所帮助。

于 2013-11-21T10:47:24.637 回答