当序列化具有内联初始化为 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);
在查看反序列化对象的值时 - SomeMember 值为 true。这没有多大意义,因为内联成员初始化代码应该由编译器插入到默认的ctor中 - 据我所知,protobuf应该只在调用ctor之后设置成员的值(不要认为它否则可能)所以,帮助?(马克?)