我有以下内容:
[DataContract]
public class Foo
{
[DataMember(EmitDefaultValue = true)
public bool Bar { get; set; }
}
2个问题:
这里真的发生了什么因为我的bool实际上不能为空,所以如果我发出默认值那么呢?
我如何制作它,以便如果有人在没有Bar部分的情况下传递消息,那么我的服务器默认情况下将其设置为true而不是false?
基本上,我的 bar 成员不需要通过soap消息传输,如果不是,我希望它默认为true,而不是false。我不确定正确的组合,以使我的邮件大小有效(删除任何不必要的),然后将值默认为我想要的,如果它不在消息中?
答案 0 :(得分:7)
EmitDefaultValue
默认为true。
您可以尝试使用 DefaultValue
中的System.ComponentModel
属性,但我不确定它是否有效。
我刚刚测试了DefaultValue
属性,但它不起作用。这意味着您无法更改默认值 - 将始终使用数据类型的默认值。
如果您想将Bar
设置为true
,请使用:
[DataContract]
public class Foo
{
[DataMember(EmitDefaultValue = false)
public bool? Bar { get; set; }
[OnDeserialized]
private void SetValuesOnDeserialized(StreamingContext context)
{
if (!Bar.HasValue)
{
Bar = true;
}
}
}