gpt4 book ai didi

.net - 使用内联初始化反序列化 bool 数据成员时发生了奇怪的事情

转载 作者:行者123 更新时间:2023-12-04 20:02:25 26 4
gpt4 key购买 nike

当序列化具有内联初始化为 true 的 bool 成员的类型时 - 我总是在对象反序列化时将值设为 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 之后才设置成员的值(不要认为它否则可能)所以,帮助? (马克?)

最佳答案

默认情况下,protobuf-net 使用隐式零默认值(并且 false 被认为是零)。你可以告诉它你的意思:

[ProtoMember(1), DefaultValue(true)]
private bool m_SomeMember = true;

或者您可以(通过 RuntimeTypeModel.UseImplicitZeroDefaults )禁用此行为,以便仅处理显式默认值。

关于.net - 使用内联初始化反序列化 bool 数据成员时发生了奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12034269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com