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 );
我有一个 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 );