.Net SvcUtil: атрибуты должны быть необязательными - PullRequest
5 голосов
/ 31 мая 2010

Я пытаюсь сгенерировать классы кода C # с помощью SvcUtil.exe вместо Xsd.exe. Последний доставляет мне некоторые проблемы.

Командная строка:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer

Несколько проблем SvcUtil описаны и решены здесь: http://blog.shutupandcode.net/?p=761

Одна проблема, которую я не могу решить, это: Ошибка: тип «DatafieldDescription» в пространстве имен »не может быть импортирован. Атрибуты должны быть необязательными и из пространства имен 'http://schemas.microsoft.com/2003/10/Seri известной долей /». Либо измените схему, чтобы типы могли сопоставляться с типами контракта данных, либо используйте ImportXmlType, либо используйте другой сериализатор. «

Я изменился

<xs:attribute name="Order" use="required">

до

<xs:attribute name="Order" use="optional">

и

<xs:attribute name="Order">

Но ошибка остается. Можно ли использовать атрибуты, или я должен удалить их все (в этом случае эта выдержка окончена)?

1 Ответ

6 голосов
/ 31 мая 2010

Ответ и возможное решение можно найти здесь: MSDN: импорт схемы для генерации классов

Специфический: XsdDataContractImporter поддерживает ограниченное подмножество схемы. Если присутствуют неподдерживаемые конструкции схемы (например, , атрибуты XML ), попытка импорта завершится неудачно с исключением. Однако установка свойства ImportXmlType в значение true расширяет диапазон поддерживаемых схем . Когда установлено значение true, XsdDataContractImporter генерирует типы, которые реализуют интерфейс IXmlSerializable. Это обеспечивает прямой доступ к представлению XML этих типов.

Как в:

SvcUtil.exe myschema.xsd /dconly /ser:XmlSerializer /importXmlTypes

К сожалению, в результате получится такой код:

private System.Xml.XmlNode[] nodesField;

С уважением, Michel

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