Создать класс для схемы с абстрактным сложным типом

Я работаю с некоторой схемой, которая определяет абстрактный сложный тип, например.

<xs:complexType name="MyComplexType" abstract="true">

Затем на этот тип ссылается другой сложный тип в схеме:

<xs:complexType name="AnotherType">
  <xs:sequence>
    <xs:element name="Data" type="MyComplexType" maxOccurs="unbounded"/>
  </xs:sequence>
</xs:complexType>

Когда я запускаю «xsd.exe / d / l: CS MySchema.xsd», я получаю такую ​​ошибку:

Ошибка: произошла ошибка при обработке MySchema.xsd '. - Ошибка генерации кода для DataSet ''. - Невозможно преобразовать содержимое входного XML-файла в DataSet. DataSet не может создать экземпляр абстрактного ComplexType для узла Data. - DataSet не может создать экземпляр абстрактного ComplexType для узла Data.

Это не похоже на недопустимую схему. Кто-нибудь еще сталкивался с этой проблемой?

Спасибо

Ник


person ng5000    schedule 20.11.2008    source источник


Ответы (3)


После оценки нескольких различных инструментов преобразования схемы в код, мы обнаружили, что единственный способ справиться с нашей схемой (очень большой и чрезвычайно сложной) - это Liquid XML (http://www.liquid-technologies.com/).

person ng5000    schedule 15.12.2008

Я никогда не сталкивался с этой проблемой, но быстро понял, что у xsd.exe много недостатков. Мы начали использовать CodeXS очень давно. Продукт представляет собой веб-службу, но код доступен как инструмент командной строки.

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

Возможно, у него не будет такого же ограничения?

person Brian Genisio    schedule 20.11.2008
comment
Это работает, но я не смогу загрузить xsd нашей компании в стороннюю веб-службу (независимо от того, насколько кратко, без каких-либо гарантий или на месте). По крайней мере, это подтверждает, что это проблема xsd.exe :( - person ng5000; 20.11.2008
comment
Вам не о чем беспокоиться. Фактически, вы можете загрузить их исходный код и скомпилировать его в исполняемый файл, который вы запускаете локально - http://www.bware.biz/default.htm?http://www.bware.biz/DotNet/Инструменты/CodeXS/WebClient/GenerateInput.aspx - person Brian Genisio; 20.11.2008
comment
Мы используем версию для командной строки и запускаем ее как шаг перед сборкой в ​​нашем решении. - person Brian Genisio; 20.11.2008

Я знаю, что это старый вопрос, но на этой неделе мне нужен был ответ. Я попробовал Liquid Studios, как было предложено @ ng5000, и обнаружил, что это программное обеспечение очень неуклюже. Вдобавок вывод cs был настолько сложным, что дал мне более 800 строк кода для одного объекта с 12 простыми свойствами.

Я настоятельно рекомендую Xml2CSharp, веб-инструмент, который генерирует красивые и простые объекты POCO с декораторами атрибутов XML.

person Don Rolling    schedule 21.09.2017