WCF DataMember EmitDefaultValue的值类型?(但设置我自己的默认值)

mic*_*ael 2 wcf soap boolean default-value datamember

我有以下内容:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = true)
    public bool Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

2个问题:

  1. 这里真的发生了什么因为我的bool实际上不能为空,所以如果我发出默认值那么什么呢?

  2. 我如何做到这一点,如果有人传递没有Bar部分的消息,那么我的服务器默认情况下将其设置为true而不是false?


基本上,我的bar成员不需要通过soap消息传输,如果不是,我希望它默认为true,而不是false.我不确定正确的组合,以使我的邮件大小有效(删除任何不必要的),然后将值默认为我想要的,如果它不在消息中?

Lad*_*nka 7

EmitDefaultValue 默认情况下为true.

您可以尝试使用DefaultValue属性,System.ComponentModel但我不确定它是否有效.

我刚刚测试了DefaultValue属性,但它不起作用.这意味着您无法更改默认值 - 将始终使用数据类型的默认值.

如果你想设置你Bartrue使用:

[DataContract]
public class Foo
{
    [DataMember(EmitDefaultValue = false)
    public bool? Bar { get; set; }

    [OnDeserialized]
    private void SetValuesOnDeserialized(StreamingContext context)
    {
        if (!Bar.HasValue) 
        {
           Bar = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)