Десериализация XML-файлов и извлечение значений по умолчанию из схемы для несуществующих значений

Я работаю с C# и пытаюсь десериализовать файл XML в свое приложение. Это многопоточный процесс, который извлекает файлы XML из нескольких каталогов, где каждый каталог может иметь определенную схему в зависимости от потребностей наших клиентов.

Я пытаюсь использовать схему для определенного каталога и десериализатор, который мне нужен для загрузки данных из файла XML в мой объект в моем приложении. Однако мне нужно, чтобы десериализатор взял значения по умолчанию из схемы, если элемент не указан в файле XML.

Я обнаружил, что есть способ указать местоположение схемы для класса с помощью атрибута [XmlSchemaProviderAttribute("GetSchemaFile")] и статического метода (ref http://msdn.microsoft.com/en-us/magazine/cc300797.aspx). Это, однако, не будет работать для моей текущей ситуации, так как у меня есть несколько схем, специфичных для разных файлов.

Кто-нибудь знает способ сделать это? Или я должен попытаться найти альтернативный способ справиться с моей потребностью по умолчанию?

2 ответа

Решение

Поэтому у меня просто была возможность проверить ваше предложение @David об использовании noNamespaceSchemaLocation, и XmlSerializer, по-видимому, не извлекает какую-либо информацию из схемы, указанной там, для значений по умолчанию. Я весь день искал способ сделать эту работу, отсюда и причина, по которой я написал.

* РЕДАКТИРОВАТЬ *

Просмотрев множество разных сайтов, я обнаружил, что использование метода десериализации C# XML Serializer для извлечения значений по умолчанию из схемы невозможно, если схема должна быть динамической, то есть десериализуемый объект может иметь разные значения по умолчанию в разных схемах.

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

Спасибо @David за предложения. Они очень ценятся.

Каждый файл XML должен указывать схему, которую он использует. Обычно это делается в корневом элементе.

В приведенном ниже примере схема была расположена в том же каталоге, что и файл XML. Очевидно, что это изменится, в зависимости от того, где находится схема, относительно файла XML. Однако дело в том, что вы используете файл XML для ссылки на схему. Затем любые значения по умолчанию будут автоматически применены вашим анализатором XML.

<node name="/org/freedesktop/sample_object" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="introspect.xsd">

Вот ссылка с кратким обзором того, как ссылаться на схему.

Другие вопросы по тегам