Как сериализовать наследуемый класс с помощью ProtoBuf-Net
Извините, если это дубликат. Я искал в нескольких местах ответ, который мог бы понять, включая:
ProtoBuf.net Свойства базового класса не включены при сериализации производного класса
Сериализация наследуемых классов с использованием protobuf-Net
Мои извинения, но я не очень понял ответы. Я ищу более быстрый и компактный двоичный сериализатор, и ProtoBuf выглядит так, как будто это может быть ответом. Мне нужно сериализовать набор классов, которые все происходят из одного базового класса. Их много, поэтому перед тем, как редактировать код класса, я провел простой тест. Также я не хочу изменять классы каким-либо образом, который может повлиять на десериализацию старых постоянных файлов, созданных с помощью двоичного сериализатора NET.
Это базовый класс:
[ProtoContract]
public class BaseClass
{
[ProtoMember(1)]
public string Name
{
get; set;
}
[ProtoMember(2)]
public int Age
{
get; set;
}
}
Это производный класс:
[ProtoContract]
public class SubClass1 : BaseClass
{
[ProtoMember(3)]
public string Town
{
get; set;
}
[ProtoMember(4)]
public Sex Sex
{
get; set;
}
}
Это код для сериализации и десериализации (взят прямо из Руководства по началу работы).
var person = new SubClass1 { Age = 25, Name = "Fred", Town = "Denbigh", Sex = Sex.Female };
using (var file = File.Create(filename))
{
Serializer.Serialize(file, person);
}
и десериализовать:
SubClass1 newPerson;
using (var file = File.OpenRead(filename))
{
newPerson = Serializer.Deserialize(file);
}
MessageBox.Show(newPerson.Name +
" : " + newPerson.Town +
" : " + newPerson.Age.ToString() +
" : " + newPerson.Sex);
Результат " : Денби: 0: Женский
Каким-то образом значения из свойств базового класса не сериализуются? Первоначально я протестировал его с индексами ProtoMember для производного класса как 1, 2. Я думал, что это не сработает, поэтому пошел на 3, 4. Кажется, нет никакой разницы. В своей паранойе я провел тот же тест, используя стандартный двоичный сериализатор NET, и получил ожидаемый результат: "Фред: Денби: 25: женщина "
Что мне не хватает, пожалуйста?