Cómo generate.NET 4.0 clases de xsd?


¿Cuáles son las opciones para generar clases (entidades). NET 4.0 c# a partir de un archivo xsd, utilizando Visual Studio 2010?

 246
Author: Jeroen, 2011-03-07

6 answers

Bastante simple; simplemente ejecute (en el símbolo del sistema vs)

xsd your.xsd /classes

(que creará your.cs). Tenga en cuenta, sin embargo, que la mayoría de las opciones intrínsecas aquí no han cambiado mucho desde 2.0

Para las opciones, use xsd /? o vea MSDN; por ejemplo /enableDataBinding puede ser útil.

 398
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-07 09:01:43

Xsd.exe como lo menciona Marc Gravell. La forma más rápida de poner en marcha IMO.

O si necesita más flexibilidad / opciones :

Xsd2code VS add-in (Codeplex)

 51
Author: Serge Wautier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-14 08:28:23

Xsd.exe no funciona bien cuando tiene referencias circulares (es decir, un tipo puede poseer un elemento de su propio tipo directa o indirectamente).

Cuando existen referencias circulares, utilizo Xsd2Code. Xsd2Code maneja bien las referencias circulares y funciona dentro del IDE VS, lo cual es una gran ventaja. También tiene muchas características que puede usar, como generar el código de serialización / deserialización. Asegúrese de activar GenerateXMLAttributes si está generando serialización (de lo contrario obtendrá excepciones para ordenar si no está definido en todos los elementos).

Ninguno funciona bien con la función choice. terminarás con listas / colecciones de objetos en lugar del tipo que deseas. Recomiendo evitar la elección en su xsd si es posible, ya que esto no serializa/deserializa bien en una clase fuertemente mecanografiada. Si no te importa esto, entonces no es un problema.

La característica any en xsd2code se deserializa como System.XML.XmlElement que me parece realmente conveniente, pero puede ser un problema si desea objetos tipeados fuertes. A menudo uso any al permitir datos de configuración personalizados, por lo que es conveniente pasar un XmlElement a otro deserializer XML que esté definido de forma personalizada en otro lugar.

 13
Author: VoteCoffee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-03 15:05:44

Utilizo XSD en un script por lotes para generar .xsd archivo y clases desde XML directamente:

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%
 1
Author: hdoghmen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-23 11:50:58

La respuesta de Marc Gravells fue correcta para mí, pero mi xsd fue con extensión de .XML. Cuando usé el programa xsd dio :
- The table (Amt) cannot be the child table to itself in nested relations.

Según este KB325695 He renombrado la extensión de .xml a .xsd y funcionó bien.

 1
Author: Igoris Azanovas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-24 13:42:22

Usé xsd.exe en el símbolo del sistema de Windows.

Sin embargo, dado que mi xml hacía referencia a varios xml en línea (en mi caso http://www.w3.org/1999/xlink.xsd que hace referencia http://www.w3.org/2001/xml.xsd) también tuve que descargar esos esquemas, ponerlos en el mismo directorio que mi xsd, y luego enumerar esos archivos en el comando:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools \ xsd.exe " / clases / idioma:CS su.xsd xlink.xsd xml.xsd

 0
Author: Aske B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-07 06:35:42