Como serializar a classe herdada com o ProtoBuf-Net

Me desculpe se isso é uma duplicata. Eu pesquisei em vários lugares por uma resposta que eu possa entender, incluindo:

ProtoBuf.net Propriedades de classe base não são incluídas ao serializar a classe derivada

Serialize classes herdadas usando protobuf-net

Minhas desculpas, mas eu realmente não entendi as respostas. Eu estou procurando um serializador binário mais compacto mais rápido e ProtoBuf parece que poderia ser a resposta. Eu preciso serializar um conjunto de classes que derivam de uma única classe base. Há um grande número deles, portanto, antes de se comprometer a editar o código da turma, executei um teste simples. Além disso, eu não quero modificar as classes de forma alguma que possam afetar a desserialização de arquivos persistentes gerados com o serializador binário NET.

Esta é a classe base:

[ProtoContract]
    public class BaseClass
    {
        [ProtoMember(1)]
        public string Name
        {
            get; set;
        }
        [ProtoMember(2)]
        public int Age
        {
            get; set;
        }
    }

Esta é a classe derivada:

[ProtoContract]
    public class SubClass1 : BaseClass
    {
        [ProtoMember(3)]
        public string Town
        {
            get; set;
        }

        [ProtoMember(4)]
        public Sex Sex
        {
            get; set;
        }
    }

Este é o código para serializar e desserializar (obtido diretamente do Guia de Introdução

var person = new SubClass1 { Age = 25, Name = "Fred", Town = "Denbigh", Sex = Sex.Female };

            using (var file = File.Create(filename))
            {
                Serializer.Serialize(file, person);
            }

e desserializar:

SubClass1 newPerson;
            using (var file = File.OpenRead(filename))
            {
                newPerson = Serializer.Deserialize<SubClass1>(file);
            }

            MessageBox.Show(newPerson.Name + 
                " : " + newPerson.Town + 
                " : " + newPerson.Age.ToString() + 
                " : " + newPerson.Sex);

O resultado é ": Denbigh: 0: Female"

De alguma forma, os valores das propriedades da classe base não estão sendo serializados? Eu originalmente testei com os índices ProtoMember para a classe derivada como 1, 2. Eu meio que pensei que não funcionaria então fui para 3, 4. Parece não fazer diferença. Na minha paranoia eu executei o mesmo teste usando o serializador binário padrão da NET e obtive o resultado esperado: "Fred: Denbigh: 25: Female"

O que estou perdendo por favor?

questionAnswers(2)

yourAnswerToTheQuestion