我注意到,如果数据协定中的布尔属性不发出默认属性,例如
[DataMember(Order = 0, IsRequired = true, EmitDefaultValue = false)]
public bool IsSet { get; set; }
然后将该属性设置为 false 会导致序列化错误。这似乎违反直觉,因为属性已经设置,只是它被设置为 false。解决方案是始终将布尔属性配置为发出默认值,然后 true 将通过线路作为 true,而 false 作为 false。
只是好奇:这是 System.Runtime.Serialization 中的错误还是布尔类型语义的必然结果?