2008-11-21 2 views
1

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


Первый вопрос, если у меня есть пользовательские 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

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

2

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

2) Если вы беспокоитесь о беспорядке, вы должны избегать использования xml. Хорошо сформированный xml полон беспорядка. Я считаю, что есть способы втянуть с xml, созданный сериализатором, но не напрямую с XmlSerializer. У вас гораздо больше контроля над XML, созданным классом XmlWriter. Check here for how you can use the XmlWriter to handle namespaces.

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

0

Инструменты, - Xsd.exe, с помощью командной строки, как

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

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

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

Смежные вопросы