gpt4 book ai didi

c# - 为什么 DataMemberAttribute 需要对 bool 属性进行特殊处理

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:21 31 4
gpt4 key购买 nike

我注意到如果数据协定中的 bool 属性不发出默认属性,例如

    [DataMember(Order = 0, IsRequired = true, EmitDefaultValue = false)]
public bool IsSet { get; set; }

然后将该属性设置为 false 会导致序列化错误。这似乎违反直觉,因为属性已经设置,只是它被设置为 false。解决方案是始终将 bool 属性配置为发出默认值,然后 true 将通过网络传输为 true,false 为 false。

只是好奇:这是 System.Runtime.Serialization 中的错误还是 bool 类型语义的必然结果?

最佳答案

你的问题有点令人困惑,但我认为你所看到的似乎是 sqying 的行为不是错误,也不是与 bool 值有关的任何事情。

操作合约标记为 IsRequired 设置为 true。默认情况下,EmitDefaultValue 设置为 true,但在发布的代码中它被设置为 false。

EmitDefaultValue 属性指示是否序列化值是默认值(换句话说,如果该属性设置为 false,则不会根据您当前的定义序列化该属性)。

由于该属性被标记为必需,如果您将值设置为 false 序列化将失败(如果 EmitDefaultValue 为 false),因为您给出了相互矛盾的指示 -你是说这个属性是序列化所必需的,但如果它是默认值 (false),则不要序列化它。

在某种程度上,我猜你可以说这是因为 bool 值的性质(它不是真就是假,假是默认值),但实际上这是因为 IsRequiredEmitDefaultValue 交互。

看看Data Member DefaultValues ,特别是“与 IsRequired 的交互”部分。

关于c# - 为什么 DataMemberAttribute 需要对 bool 属性进行特殊处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18994011/

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