[英]protobuf-net skips a member (of Interface type) from base class
我有一个Base
class ,它定义了一个名为Member
的IMember
类型的成员。 然后我有一个Child
class 继承Base
并定义了一个名为Member2
IMember
我序列化了Child
class 的一个实例,保存在Base
类型的变量中,期望所有子成员和基本成员都被序列化。 除了当来自Child
的Member2
被序列化时,在Base
class 中定义的具有相同类型的成员没有被序列化,(或者至少在反序列化时我得到一个 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();
}
反序列化的 object obj
具有Member == null
而Member2 != null
。 这是为什么?
基础 class 缺少用于指定层次结构的 [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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.