изменить способ сериализации XmlSerializer пустых элементов

Я использую XmlSerializer. Он отлично сериализует объект, но клиент требует, чтобы необходимые пустые элементы были в этом формате <star:Confirm/>. Вместо этого сериализатор сериализует пустые элементы в <star:Confirm></star:Confirm>, есть ли способ изменить его, чтобы сериализовать так, как требует клиент.


person Chris Lunt    schedule 14.10.2010    source источник


Ответы (2)


Попробовав разные вещи, я случайно наткнулся на решение. Я установил для XmlElementAttribute.IsNullable значение true, как было предложено в предыдущем ответе.

[System.Xml.Serialization.XmlElementAttribute(ElementName = "Confirm", IsNullable=true)]
    public ConfirmType Confirm
    {
        get
        {
            return this.confirmField;
        }
        set
        {
            this.confirmField = value;
            this.RaisePropertyChanged("Confirm");
        }
    }

Затем при установке типа подтверждения в коде я использовал конструктор по умолчанию вместо того, чтобы установить для подтверждения значение null.

retval.ConfirmBODDataArea.Confirm = new ConfirmType();

Это сериализовано как <star:Confirm/>

person Chris Lunt    schedule 14.10.2010
comment
Спасибо, что напомнили мне о значениях по умолчанию и о том, что я должен использовать конструктор по умолчанию вместо = Nothing в коде vb.net! :) - person Ian Grainger; 02.11.2016

Вы можете попробовать установить свойство XmlElementAttribute.IsNullable до true. Однако имейте в виду, что в результате будет выведен атрибут xsi:nil="true".

person Ondrej Tucny    schedule 14.10.2010