Как сериализовать наследуемый класс с помощью 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: женщина "

Что мне не хватает, пожалуйста?

Ответы на вопрос(2)

Ваш ответ на вопрос