Как я мешаю пустому тегу быть испущенным XmlSerializer?

У меня есть объект как это,

public class UserObj
{
    public string First {get; set;}
    public string Last  {get; set;}
    public addr Address {get; set;}

}

public class addr
{
    public street {get; set;}
    public town   {get; set;}
}

Теперь, когда я использую XmlSerializer на нем, и улица и город пусты, я получаю это в выводе XML,

 <Address />

Существует ли способ не произвести этот пустой тег?

Спасибо

6
задан dbc 21 July 2018 в 16:34
поделиться

3 ответа

Вы можете реализовать IXmlSerializable и реализовать процедуру сериализации самостоятельно. Таким образом, вы можете избежать элемента.

Пример здесь: http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/

2
ответ дан 17 December 2019 в 00:03
поделиться

Вы можете реализовать метод ShouldSerializeAddress , чтобы решить, следует ли сериализовать свойство Address:

public bool ShouldSerializeAddress()
{
    return Address != null
        && !String.IsNullOrEmpty(Address.street)
        && !String.IsNullOrEmpty(Address.town);
}

Если существует метод с этой подписью, сериализатор вызовет его перед сериализацией свойства.

В качестве альтернативы вы можете реализовать свойство AddressSpecified , которое имеет ту же роль:

public bool AddressSpecified
{
    get
    {
        return Address != null
            && !String.IsNullOrEmpty(Address.street)
            && !String.IsNullOrEmpty(Address.town);
    }
}
5
ответ дан 17 December 2019 в 00:03
поделиться

Вы можете устранить пустое значение, добавив к свойству атрибут DefaultValue. Когда значение свойства совпадает со значением по умолчанию, оно не сериализуется. Вы устанавливаете значение по умолчанию равным null, чтобы устранить сериализацию. Вот пример:


using System.ComponentModel;
public class UserObj
{
    public string First {get; set;}
    public string Last  {get; set;}

    [DefaultValue(null)]
    public addr Address {get; set;}

}
0
ответ дан 17 December 2019 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: