Messagepack "partial" 序列化

Messagepack "partial" serialization

我有一个 class,其中包含一些私有和 public 字段和属性。

[MessagePackObject(false)]
public class Person
{
    [Key(1)]
    public string Name { get; set; }
    [IgnoreMember]
    private int _age;
    [Key(2)]
    public int Age { get { return _age; } set { _age = value; } }
}

在某些情况下我不需要序列化Age,我只需要序列化一些字段(例如仅Name)。所以我需要 2 种方法,序列化所有对象和部分序列化。我该如何组织它?

回答我自己的问题。

我找到的唯一解决方案是将 Name 移动到基础 class BasePerson。我会将对象序列化为 BasePerson,然后将字节反序列化为 Person

[MessagePackObject(false)]
public class BasePerson
{
    [Key(1)]
    public string Name { get; set; }
}

[MessagePackObject(false)]
public class Person
{
    [IgnoreMember]
    private int _age;
    [Key(2)]
    public int Age { get { return _age; } set { _age = value; } }
}

用法:

Person person = new Person()
{
    Name = "Gor",
    Age = 26
};
var serializedBytes = MessagepackSerializer.Serialize<BasePerson>(person);
// will give me person with `Name` "Gor" and `Age` 0 (default value of int)
var personWithoutAge = MessagepackSerializer.Deserialize<Person>(serializedBytes );