Jak serializować dziedziczoną klasę za pomocą ProtoBuf-Net

Przepraszam, jeśli jest to duplikat. Szukałem odpowiedzi na kilka miejsc, które mógłbym zrozumieć, w tym:

Właściwości klasy podstawowej ProtoBuf.net nie są uwzględniane podczas serializowania klasy pochodnej

Serializuj dziedziczone klasy za pomocą protobuf-net

Przepraszam, ale tak naprawdę nie rozumiałem odpowiedzi. Szukam szybszego, bardziej zwartego serializatora binarnego i wygląda na to, że ProtoBuf może być odpowiedzią. Muszę serializować zestaw klas, które pochodzą z jednej klasy bazowej. Jest ich wiele, więc przed przystąpieniem do edycji kodu klasy przeprowadziłem prosty test. Nie chcę też modyfikować klas w żaden sposób, który mógłby wpłynąć na deserializację starszych utrwalonych plików wygenerowanych za pomocą serializatora binarnego NET.

To jest klasa podstawowa:

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

To jest klasa pochodna:

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

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

Jest to kod do serializacji i deserializacji (pobrany bezpośrednio z przewodnika Wprowadzenie)

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

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

i deserializować:

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

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

Rezultatem jest „: Denbigh: 0: Female”

Jakoś wartości z właściwości klasy bazowej nie są serializowane? Początkowo przetestowałem go z indeksami ProtoMember dla klasy pochodnej jako 1, 2. Myślę, że nie zadziałało, więc poszło 3, 4. Wydaje się, że nie ma to znaczenia. W mojej paranoi przeprowadziłem ten sam test przy użyciu standardowego serializatora binarnego NET i uzyskałem oczekiwany wynik: „Fred: Denbigh: 25: Female”

Czego mi brakuje?

questionAnswers(2)

yourAnswerToTheQuestion