2

我有以下内容:

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

2个问题:

  1. 这里真正发生了什么,因为我的 bool 不能真正为空,所以如果我发出默认值,那会怎样?

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


基本上,我的酒吧成员不需要通过肥皂消息进行传输,如果不是,我希望它默认为真,而不是假。我不确定适当的组合可以使我的消息大小有效(删除任何不必要的内容),然后将值默认为我想要的值(如果它不在消息中)?

4

1 回答 1

7

EmitDefaultValue默认情况下为真。

您可以尝试使用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;
        }
    }
}
于 2011-06-06T14:37:41.830 回答