У меня есть объект как это,
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 />
Существует ли способ не произвести этот пустой тег?
Спасибо
Вы можете реализовать IXmlSerializable
и реализовать процедуру сериализации самостоятельно. Таким образом, вы можете избежать элемента.
Пример здесь: http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/
Вы можете реализовать метод 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);
}
}
Вы можете устранить пустое значение, добавив к свойству атрибут 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;}
}