我有一个Base
类,它定义一个名为Member
的IMember
类型的成员。然后我有一个继承Base
的Child
类,并定义了一个名为Member2
的新成员IMember
。我序列化了Child
类的一个实例,该实例保存在Base
类型的变量中,期望所有的子成员和基成员都被序列化。除了来自Child
的Member2
是序列化的,在Base
类中定义的具有相同类型的成员不是序列化的(或者至少在反序列化时,它的值是null )
我的类完全是这样的:
[ProtoContract]
[ProtoInclude(100, typeof(Member))]
public interface IMember {
[ProtoMember(1, IsRequired = true)]
int value { get; set; }
}
[ProtoContract()]
public class Member : IMember {
[ProtoMember(1, IsRequired = true)]
public int value { get; set; }
}
[ProtoContract()]
public class Base {
[ProtoMember(1, IsRequired = true)]
public virtual string Name { get; set; } = "Base";
[ProtoMember(2, IsRequired = true)]
public IMember MyMember { get; set; } = null;
}
[ProtoContract()]
public class Child : Base {
[ProtoMember(1, IsRequired = true)]
public override string Name { get; set; } = "Child";
[ProtoMember(2, IsRequired = true)]
public IMember MyMember2 { get; set; } = null;
}
测试代码如下:
static void Main(string[] args) {
Base b = new Child() {
MyMember = new Member() { value = 10 },
MyMember2 = new Member() { value = 20 }
};
var stream = new MemoryStream();
Serializer.Serialize(stream, b);
var bytes = stream.ToArray();
stream = new MemoryStream(bytes);
var obj = Serializer.Deserialize<Child>(stream);
Console.ReadLine();
}
反序列化的对象obj
具有Member == null
,而具有Member2 != null
。为什么会这样呢?
发布于 2020-07-15 04:16:29
基类缺少用于指定层次结构的ProtoInclude属性。
[ProtoContract()]
[ProtoInclude(100, typeof(Child))]
public class Base {
[ProtoMember(1, IsRequired = true)]
public virtual string Name { get; set; } = "Base";
[ProtoMember(2, IsRequired = true)]
public IMember MyMember { get; set; } = null;
}
https://stackoverflow.com/questions/62887165
复制相似问题