C# XML сериализация не пишет ноль

Когда я сериализую AC# объект с нулевым DateTime в нем, есть ли способ оставить нулевое значение из файла XML вместо того, чтобы иметь

 <EndDate d2p1:nil="true" xmlns:d2p1="http://www.w3.org/2001/XMLSchema-instance" />

3 ответа

Решение

Вы можете использовать Specified расширенное свойство, чтобы пропустить нулевые значения (или любое другое значение, если на то пошло). По сути, создайте другое свойство с тем же именем, что и у сериализованного свойства со словом Specified добавлен в конец как логическое значение. Если Specified свойство trueзатем свойство, которым оно управляет, сериализуется. В противном случае, если это falseдругое свойство полностью исключено из файла xml:

[XmlElement("EndDate")]
public DateTime? EndDate { get; set; }
[XmlIgnore]
public bool EndDateSpecified { get {
    return (EndDate != null && EndDate.HasValue); } }

MSDN ссылка

это позволяет вам сказать, хотите ли вы пустой элемент для нулевых объектов

Я знаю, что это старая тема, но в случае, если кто-то еще найдет это:

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

bool ShouldSerialize[YourPropertyName]();

Например, в вашем случае

public bool ShouldSerializeEndDate(){
    return (EndDate != null && EndDate.HasValue);
}

Сделайте это для каждого свойства, которое вы хотите при желании сериализовать.

Другие вопросы по тегам