title: How to Serialize Inherited Class with ProtoBuf-Net
body: <p>I am sorry if this is a duplicate.  I have searched several places for an answer that I might understand including:</p>
  
  <p><a href="https://stackoverflow.com/questions/6109868/protobuf-net-base-class-properties-is-not-included-when-serializing-derived-clas">ProtoBuf.net Base class properties is not included when serializing derived class</a></p>
  
  <p><a href="https://stackoverflow.com/questions/9530787/serialize-inherited-classes-using-protobuf-net">Serialize inherited classes using protobuf-net</a></p>
  
  <p>My apologies but I did not really understand the answers.   I am looking for a faster more compact binary serializer and ProtoBuf looks like it might be the answer.   I need to serialize a set of classes that all derive from a single base class.  There are a large number of them so before committing to edit the class code I ran a simple test. Also I do not want to modify the classes in any way that might impact deserializing older persisted files generated with the NET binary serializer.</p>
  
  <p>This is the base class:</p>
  
  <pre><code>[ProtoContract]
      public class BaseClass
      {
          [ProtoMember(1)]
          public string Name
          {
              get; set;
          }
          [ProtoMember(2)]
          public int Age
          {
              get; set;
          }
      }
  </code></pre>
  
  <p>This is the derived class:</p>
  
  <pre><code>[ProtoContract]
      public class SubClass1 : BaseClass
      {
          [ProtoMember(3)]
          public string Town
          {
              get; set;
          }
  
          [ProtoMember(4)]
          public Sex Sex
          {
              get; set;
          }
      }
  </code></pre>
  
  <p>This is the code to serialize and deserialize (taken directly from the Getting Started Guide</p>
  
  <pre><code>var person = new SubClass1 { Age = 25, Name = "Fred", Town = "Denbigh", Sex = Sex.Female };
  
              using (var file = File.Create(filename))
              {
                  Serializer.Serialize(file, person);
              }
  </code></pre>
  
  <p>and de -serialize:</p>
  
  <pre><code>SubClass1 newPerson;
              using (var file = File.OpenRead(filename))
              {
                  newPerson = Serializer.Deserialize&lt;SubClass1&gt;(file);
              }
  
              MessageBox.Show(newPerson.Name + 
                  " : " + newPerson.Town + 
                  " : " + newPerson.Age.ToString() + 
                  " : " + newPerson.Sex);
  </code></pre>
  
  <p>The result is  " : Denbigh : 0 : Female"</p>
  
  <p>Somehow the values from the base class properties are not being serialized?  I originally tested it with the ProtoMember indices for the derived class as 1, 2.  I kind of thought that would not work so went for 3, 4.  It seems to make no difference.  In my paranoia I ran the same test using the standard NET binary serializer and got the expected result: "Fred : Denbigh : 25 : Female"</p>
  
  <p>What am I missing please?</p>