Привет. У меня есть такой контракт:
[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 атрибутами.
Очень хочется надеяться, что кто-то уже сталкивался с такой проблемой, ибо вроде кейс не такой уж уникальный. Но я уже потратил много времени в гугле в поисках решения и ничего не нашёл - все тщетно :(