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

时间:2011-06-06 14:24:30

标签: wcf soap boolean default-value datamember

我有以下内容:

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

2个问题:

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

  2. 我如何制作它,以便如果有人在没有Bar部分的情况下传递消息,那么我的服务器默认情况下将其设置为true而不是false?


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

1 个答案:

答案 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;
        }
    }
}