Сериализация XML и схемы в .net (C #) - PullRequest
1 голос
/ 21 ноября 2008

Следующие вопросы касаются сериализации / десериализации XML и проверки схемы для библиотеки типов .net, которые должны использоваться для обмена данными.


Первый вопрос, если у меня есть собственное пространство имен xml, скажите «http://mydomain/mynamespace" нужно ли добавить

[XmlRoot(Namespace = "http://mydomain/mynamespace")]

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


Второй вопрос, есть ли причина всегда добавляемых пространств имен

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

даже если нет фактической ссылки на какое-либо из пространств имен? Я просто чувствую, что они добавляют шум к полученному XML. Есть ли способ удалить их, если в полученном XML-файле есть только пользовательское пространство имен?


Третий вопрос, существуют ли инструменты для поддержки генерации определений схем (например, для всех открытых [Serializable] классов сборки) и проверки xml на соответствие конкретным схемам?

Если есть, порекомендуете ли вы XML-схему от W3C или RELAX NG?

Ответы [ 3 ]

3 голосов
/ 21 ноября 2008

Просто добавим - xsi и т. Д. Предназначены для поддержки таких вещей, как xsi: nil для значений в дальнейшем - хорошо известный шаблон для значений, допускающих обнуляемость. Он должен записывать поток «только вперед», и он не знает (когда он записывает первый бит), понадобится ли ему ноль или нет, поэтому он предполагает, что запись его без необходимости один раз лучше, чем необходимость использования полного пространства имен потенциально много раз.

2 голосов
/ 21 ноября 2008

1) XmlRoot может быть установлен только на уровне класса / структуры / интерфейса (или для возвращаемых значений). Таким образом, вы не можете использовать его на уровне сборки. То, что вы ищете, это XmlnsDefinitionAttribute , но я считаю, что он используется только XamlWriter.

2) Если вы беспокоитесь о беспорядке, вам следует избегать xml. Хорошо сформированный XML полон беспорядка. Я считаю, что есть способы взаимодействия с xml, созданным сериализатором, но не напрямую с XmlSerializer. Вы можете намного лучше контролировать XML, созданный с помощью класса XmlWriter . Проверьте здесь, как вы можете использовать XmlWriter для обработки пространств имен.

3) XSD.exe можно использовать для генерации схем для POCO, я считаю (я всегда писал их вручную; возможно, скоро я буду использовать это для написания LOTS, хотя бы!)

0 голосов
/ 21 ноября 2008

Инструменты, - xsd.exe, с командной строкой вроде

xsd /c /n:myNamespace.Schema.v2_0  myschema_v2_0.xsd

Я поместил схему в отдельный проект.

liqudXML , что полезно, если имеется несколько схем или требуется полная поддержка функций схемы (DateTimes со смещениями, положительные / отрицательные десятичные дроби) и кроссплатформенная генерация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...