Я получаю данные с сервера, как UTF-8 закодированных сообщений XML, которые выглядят какXMLNS имен resilency
<?xml version="1.0" encoding="utf-8"?>
<Data namespace="http://example.com/data">
...
</Data>
Заслуживает тут о примере в том, что «пространство имен» классификатор должен в действительности быть «XMLNS» квалификатор, определяющий пространство имен xml по умолчанию. Код для сериализации/десериализации был (автоматически) создан из файла определения схемы, и как xsd, так и документация, которая пришла вместе с ним, в значительной степени подтверждают, что это ошибка.
Однако это также означает, что объект данных в настоящее время живет в глобальных/пустом пространстве имен (XMLNS = «») и автоматически генерируемый код не с типичным "There is an error in XML document ..."
и "<Data xmlns=''> was not expected."
родом исключение того, что XmlSerialzier бросков во время десериализации, что люди видят когда пространства имен атрибутов десериализации/кода и XML-документа не совпадают.
Хотя довольно легко изменить автогенерированный код и «исправление» определения Namespace
, например.
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Data {
, что я действительно хочу это имен resilency - то есть, если в какой-то момент в будущем проблема исправлена ребятами, которые предоставляют мне данные, я не хочу быть вынуждены адаптировать Namespace
в коде снова (любое изменение xmlns приведет к разрыву кода десериализации с вышеупомянутым исключением).
То есть, я хочу код, способный обрабатывать как неисправный xml, так и, например, код.
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://example.com/data">
...
</Data>
или даже (например, если они решат идти "обратную совместимость")
<?xml version="1.0" encoding="utf-8"?>
<Data xmlns="http://example.com/data" namespace="http://example.com/data">
...
</Data>
Какие варианты у меня есть?
Ну, это скорее зависит от того, какие инструменты вы используете для обработки XML. Единственные ключи, которые вы указали, находятся в вашем выборе тегов вопроса. –
Я использую C# и встроенный XmlSerializer. – MrCC
Тогда, извините, я не специалист по этим инструментам. –