Как создать classы .NET 4.0 из xsd?

Каковы варианты генерации .NET 4.0 c # classов (сущностей) из файла xsd с использованием Visual Studio 2010?

достаточно простой; просто запустите (в командной строке vs)

xsd your.xsd /classes 

(который будет создавать your.cs ). Обратите внимание, однако, что большинство встроенных параметров здесь не сильно изменились, поскольку 2.0

Для параметров используйте xsd /? или см. MSDN ; например, /enableDataBinding может быть полезна.

xsd.exe, как упоминал Марк Гравелл. Самый быстрый способ подняться и запустить IMO.

Или, если вам нужна дополнительная гибкость / опции:

xsd2code VS add-in (Codeplex)

xsd.exe не работает, когда у вас есть циклические ссылки (т. е. тип может владеть элементом своего типа прямо или косвенно).

Когда существуют циклические ссылки, я использую Xsd2Code. Xsd2Code хорошо работает с круглыми ссылками и работает в VS IDE, что является большим плюсом. Он также имеет множество функций, которые вы можете использовать, например, для генерации кода сериализации / десериализации. Убедитесь, что вы включили GenerateXMLAttributes, если вы генерируете сериализацию, хотя (в противном случае вы получите исключения для упорядочения, если не определены для всех элементов).

Ни одна из них не работает с функцией выбора. вы получите список / коллекции объекта вместо того, который вам нужен. Я бы рекомендовал избегать выбора в вашем xsd, если это возможно, поскольку это не сериализует / десериализуется хорошо в строго типизированный class. Если вас это не волнует, то это не проблема.

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

Я использую XSD в пакетном скрипте для генерации файла .xsd и classов из XML напрямую:

 set XmlFilename=Your__Xml__Here set WorkingFolder=Your__Xml__Path_Here set XmlExtension=.xml set XsdExtension=.xsd set XSD="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1\Tools\xsd.exe" set XmlFilePath=%WorkingFolder%%XmlFilename%%XmlExtension% set XsdFilePath=%WorkingFolder%%XmlFilename%%XsdExtension% %XSD% %XmlFilePath% /out:%WorkingFolder% %XSD% %XsdFilePath% /c /out:%WorkingFolder% 

Ответ Marc Gravells был прав для меня, но мой xsd был с расширением .xml. Когда я использовал программу xsd, он дал:
- The table (Amt) cannot be the child table to itself in nested relations.

В соответствии с этим KB325695 я переименовал расширение из .xml в .xsd, и он отлично работал.

Я использовал xsd.exe в командной строке Windows.

Однако, поскольку мой xml ссылался на несколько онлайн-xml (в моем случае http://www.w3.org/1999/xlink.xsd которые ссылаются на http://www.w3.org/2001/xml.xsd ), мне также пришлось загрузите эти схемы, поместите их в тот же каталог, что и мой xsd, а затем перечислите эти файлы в команде:

«C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Инструменты \ xsd.exe” / classes / language: CS your.xsd xlink.xsd xml.xsd

  • Для чего нужны пространства имен XML?
  • XSD - как разрешить элементы в любом порядке сколько угодно раз?
  • Должно ли быть выведено URI имени пространства имен XML?
  • Есть ли разница между «действительным xml» и «хорошо сформированным xml»?
  • JAXB: Как изменить имена classов, сгенерированных XJC, когда тип attr указан в XSD?
  • В чем разница между xsd: include и xsd: import?
  • Visual Studio всегда выбирает неправильный xsd для App.config
  • Как сделать тип зависимым от значения атрибута с помощью присвоения условного типа
  • Как ограничить значение элемента XML с помощью xsi: type в XSD?
  • XML - данные на корневом уровне недействительны
  • Как конвертировать xsd в человекочитаемую документацию?
  • Давайте будем гением компьютера.