Задать вопрос
@hax
junior developer

Как десериализовать Nullable типы в атрибуты XML?

Привет. У меня есть такой контракт:

[Serializable]
public class XmlContract
{
     [XmlAttribute("ImportantAttribute")]
     [DefaultValue(null)]
     public decimal? Field { get; set; }
}


Такой контракт не сериализуется в XML формат и не десериализуется из XML из-за наличия Nullable свойства. Находил разные решения на SO типо таких. Нашёл два решения:
1) Создать Nullable Property с атрибутом [XmlIgnore], затем создать уже не-nullable property, которое будет устанавливать через сеттеры и геттеры значения для nullable property.
2) Имплементировать интерфейс IXmlSerializable и в нём описать логику сериалиализации/десериализации nullable типов.

Мне такие решения не совсем подходят (хотя они вроде и работают), потому что у меня в контракте около 100-150 пропертей, для каждого писать такую логику - просто жесть. Заменить [XmlAttribute] на [XmlElement] тоже не получится, ибо контракт вендоров поставляет именно контракт с XML атрибутами.

Очень хочется надеяться, что кто-то уже сталкивался с такой проблемой, ибо вроде кейс не такой уж уникальный. Но я уже потратил много времени в гугле в поисках решения и ничего не нашёл - все тщетно :(
  • Вопрос задан
  • 1142 просмотра
Подписаться 1 Средний Комментировать
Решение пользователя Владимир Коротенко К ответам на вопрос (3)
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Посмотрите у меня в гите, там как раз нулевые атрибуты приходят из фиас. Сейчас с мобильного не могу точный кусок скинуть
Ответ написан