如何在C#中使用MsgPack序列化子类型

时间:2017-03-27 12:02:52

标签: c# msgpack

我对c#中的msgpack序列化有疑问。 我有一个基类和一个派生自base的类,每个类都包含属性,例如:

class Base
{
    int PropertyA { get; set; }
}

class DerivedFromBase : Base
{
    int PropertyB { get; set; }
}

此外,我有一个第三类Container的对象,例如:

class Container 
{
    Base ContainerProperty { get; set; }
}

我的问题是,如果ContainerProperty的类型为DerivedFromBase,则MsgPack仅序列化PropertyA,而不是PropertyB!我如何实现,MsgPack在内部将ContainerProperty识别为DerivedFromBase?我是否必须编写自定义序列化程序,或者是否有#34;内置"方式是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

使用属性MessagePackRuntimeType让MsgPack在运行时分析类型以进行序列化:

class Container 
{
    [MessagePackRuntimeType]
    Base ContainerProperty { get; set; }
}

有关详细信息,请参阅msgpack-cli documentation on polymorphism