当序列化一个具有内联初始化为true的布尔成员的类型时 – 我总是在对象的反序列化时得到值为true(显然,问题是在序列化之前成员的实际值为false). 这种情况不会发生在相反的情况下(内
这种情况不会发生在相反的情况下(内联初始化为false,对象值为true – 我也尝试过其他操作和其他数据成员类型,它们都可以正常工作).
这是类型:
[ProtoContract] public class SomeObject { public SomeObject() {} [ProtoMember(1)] private bool m_SomeMember = true; public bool SomeMember { get { return m_SomeMember; } set { m_SomeMember = value; } } }
这是代码:
var stream = new MemoryStream(); var data = new SomeObject() {SomeMember = false}; Serializer.SerializeWithLengthPrefix<SomeObject>(stream, data , PrefixStyle.Base128); stream.Position = 0; var deserializedObject = Serializer.DeserializeWithLengthPrefix<SomeObject>(stream, PrefixStyle.Base128);
在查看deserializied对象的值时 – SomeMember值为true.
这没有多大意义,因为内联成员初始化代码应该由编译器插入到默认的ctor中 – 据我所知,protobuf应该只在调用ctor之后设置成员的值(不要认为它)是否可能)所以,帮助? (渣?)
[ProtoMember(1), DefaultValue(true)] private bool m_SomeMember = true;
或者您可以(通过RuntimeTypeModel.UseImplicitZeroDefaults)禁用此行为,以便仅处理显式默认值.