Использование декораций XML для указать значения по умолчанию во время десериализации

. У меня проблема с десериализацией некоторого XML; XML, предоставленный третьей стороной, довольно многословен, поэтому, если для определенного элемента не задано значение, он предоставит и пустой элемент (например, ).

Это проблема для определенных элементов, например, тех, которые предназначены для хранения целых чисел. У меня есть контроль над третьей стороной, поэтому я могу либо заставить их указать значение по умолчанию ( 0 ), либо я могу заставить их полностью пропустить эти элементы. И то, и другое должно избежать проблемы.

Однако в будущем могут возникнуть ситуации, когда у нас не будет такого большого контроля - в этом случае, есть ли способ указать, возможно, с помощью украшения, значение по умолчанию?

    [XmlElement("myinteger")=0???]
    public int MyInteger
    {
        get
        {
            return myInteger;
        }
        set
        {
            myInteger= value;
        }
    }
15
задан CJM 16 August 2010 в 10:19
поделиться

1 ответ

XmlSerializer поддерживает [DefaultValue] , но использует его во время сериализации . Во время десериализации он просто запускает конструктор, затем принимает входящие значения и применяет их. Таким образом, общий подход заключается в использовании конструктора (или инициализаторов полей):

public Foo() {
    Bar = 4;
}
[DefaultValue(4), XmlAttribute("bar")]
public int Bar {get;set;}

Однако ; XmlSerializer интерпретирует это не как «предоставить пустой элемент», а как «опустить элемент (/ атрибут)». Даже int? не отображается в «пустой». Чтобы обработать пустых элементов, вам придется обрабатывать его как строку. Что некрасиво.

38
ответ дан 1 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: