2

私は次のものを持っています:

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

2 つの質問:

  1. bool を実際には null にすることはできないため、ここで実際に何が起こるので、デフォルト値を発行するとどうなるでしょうか?

  2. 誰かが Bar 部分なしでメッセージを渡した場合、サーバーがデフォルトで false ではなく true に設定するようにするにはどうすればよいですか?


基本的に、私のバーメンバーは SOAP メッセージを介して送信される必要はありません。送信されない場合は、false ではなく true にデフォルト設定します。メッセージのサイズを効率的にする (不要なものを切り取る) ための適切な組み合わせがわかりません。メッセージに含まれていない場合は、必要な値をデフォルトに設定します。

4

1 に答える 1

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;
        }
    }
}
于 2011-06-06T14:37:41.830 に答える