WCF DataMember EmitDefaultValue для типа значения?(но установите мое собственное значение по умолчанию) - PullRequest
2 голосов
/ 06 июня 2011

У меня есть следующее:

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

2 Вопросы:

  1. Что на самом деле происходит здесь, потому что мой bool не может быть на самом деле нулевым, поэтому если я выбрасываюзначение по умолчанию, то что?

  2. Как мне сделать так, чтобы, если кто-то пропустит сообщение без части Bar, тогда мой сервер установит для него значение true вместо false по умолчанию?


По сути, мой член bar не должен передаваться по сообщению мыла, и если это не так, я хочу, чтобы по умолчанию он имел значение true, а не false,Я не уверен в правильной комбинации, чтобы сделать мои размеры сообщений эффективными (вырезать что-нибудь ненужное), а затем установить значение по умолчанию на то, что я хочу, если его нет в сообщении?

1 Ответ

7 голосов
/ 06 июня 2011

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;
        }
    }
}
...