如果这是重复的,我很抱歉。我已经在几个地方搜索了我可能理解的答案,包括:
我很抱歉,但我并没有真正理解答案。我正在寻找一个更快更紧凑的二进制序列化程序,而 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<SubClass1>(file);
            }
            MessageBox.Show(newPerson.Name + 
                " : " + newPerson.Town + 
                " : " + newPerson.Age.ToString() + 
                " : " + newPerson.Sex);
结果是“:Denbigh:0:女性”
不知何故,基类属性的值没有被序列化?我最初使用派生类的 ProtoMember 索引作为 1、2 对其进行了测试。我有点认为这行不通,所以选择了 3、4。似乎没有什么区别。在我的妄想症中,我使用标准 NET 二进制序列化程序运行了相同的测试并得到了预期的结果:“Fred:Denbigh:25:Female”
请问我错过了什么?