. У меня проблема с десериализацией некоторого XML; XML, предоставленный третьей стороной, довольно многословен, поэтому, если для определенного элемента не задано значение, он предоставит и пустой элемент (например,
).
Это проблема для определенных элементов, например, тех, которые предназначены для хранения целых чисел. У меня есть контроль над третьей стороной, поэтому я могу либо заставить их указать значение по умолчанию (
), либо я могу заставить их полностью пропустить эти элементы. И то, и другое должно избежать проблемы.
Однако в будущем могут возникнуть ситуации, когда у нас не будет такого большого контроля - в этом случае, есть ли способ указать, возможно, с помощью украшения, значение по умолчанию?
[XmlElement("myinteger")=0???]
public int MyInteger
{
get
{
return myInteger;
}
set
{
myInteger= value;
}
}
XmlSerializer
поддерживает [DefaultValue]
, но использует его во время сериализации . Во время десериализации он просто запускает конструктор, затем принимает входящие значения и применяет их. Таким образом, общий подход заключается в использовании конструктора (или инициализаторов полей):
public Foo() {
Bar = 4;
}
[DefaultValue(4), XmlAttribute("bar")]
public int Bar {get;set;}
Однако ; XmlSerializer
интерпретирует это не как «предоставить пустой элемент», а как «опустить элемент (/ атрибут)». Даже int?
не отображается в «пустой». Чтобы обработать пустых элементов, вам придется обрабатывать его как строку. Что некрасиво.