WCF Datacontract - поддерживает ли он обнуляемый элемент данных? - PullRequest
26 голосов
/ 11 марта 2010
    [DataMember]
    public int? NumberOfPages;   //////////// Is this supported????
    [DataMember]
    public bool? Color;          //////////// Is this supported????
    [DataMember]
    public int? BulkQuantity;
    [DataMember]

Ответы [ 5 ]

32 голосов
/ 11 марта 2010

Да, конечно!

У вас не должно возникнуть никаких проблем при создании элементов данных, допускающих обнуляемость, они будут обработаны в результирующем WSDL / XSD как элементы "xs: nillable = true". Нет проблем вообще.

7 голосов
/ 11 марта 2010

Да, см. Типы, поддерживаемые сериализатором контракта данных :

Обнуляемые типы полностью поддерживаются сериализатором контракта данных.

4 голосов
/ 05 июля 2012

@ Кахун и Батвад:

Мы решили эту проблему, используя тип nullable<> или ? в два этапа:

  1. В классе, содержащем общее поле, определите поле следующим образом:

    nullable<GenType> MyField {get; set;}
    
  2. В контракте данных, который использует этот базовый класс, вы можете определить, какие элементы известны сериализатору / десериализатору, используя некоторые аннотационные теги. Здесь мы определили, например:

    [Serializable]
    [DataContract]
    [KnownType(typeof(BaseClass<nullable<DateTime>>))]
    

    Вместо BaseClass<nullable<DateTime>> вы можете использовать BaseClass<DateTime?>, я думаю.

После этого у нас сработала сериализация общих нулевых значений.

1 голос
/ 04 мая 2012

Обычно это работает, но вы можете столкнуться с проблемами, если класс, который содержит обнуляемый член, является универсальным.Кто-то также столкнулся с той же проблемой, что и я: https://web.archive.org/web/20160617092729/http://discoveringdotnet.alexeyev.org/2009/06/wcf-nullable-values-are-not-working-in.html

0 голосов
/ 09 мая 2018

В моем случае похоже, что переданное в Nullable Integer обрабатывается как Пустая строка и НЕ Нулевое значение

Так вот, как я обращаюсь со значением NULL в коде

    [XmlIgnore]
    public int? NumberOfPagesCount{ get; set; }

    [XmlElement("NumberOfPages")]
    public string NumberOfPagesText
    {
        get { return this.NumberOfPagesCount.HasValue ? this.NumberOfPagesCount.Value.ToString("F2") : string.Empty; }
        set
        {
            if (!string.IsNullOrEmpty(value))
            {
                this.NumberOfPagesCount= Convert.ToInt32(value);
            }
            else
            {
                this.NumberOfPagesCount= null;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...