Generar clase C # a partir de XML

Respuestas:

338

Sí, usando xsd.exe

D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.

D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.

Notas

Responda cómo cambiar el directorio en el símbolo del sistema del desarrollador a d: \ temp puede ser útil.

Si genera clases para una matriz multidimensional, hay un error en el generador XSD.exe, pero hay soluciones .

Darin Dimitrov
fuente
18
Para usar, xsdejecute el símbolo del sistema del desarrollador para VS2013 en el menú de herramientas.
Jess
13
xsd.exese puede encontrar en:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian
77
tenga en cuenta que si tiene un archivo XML complejo grande, la clase generada será tan fea que casi será inutilizable;)
Matthew Lock
3
Para mí xsd.exefue encontrado en: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179
413

Si está trabajando en el proyecto .NET 4.5 en VS 2012 (o más reciente), puede simplemente Pegar su archivo XML como clases especiales.

  1. Copie el contenido de su archivo XML al portapapeles
  2. En el editor, seleccione el lugar donde desea que se peguen sus clases
  3. Desde el menú, seleccione EDIT > Paste Special > Paste XML As Classes
miszczu
fuente
22
Solo deseo que esto genere propiedades implementadas automáticamente, como lo hace para "Pegar JSON como clases". Actualmente esto significa un resultado de código inflado 6 veces, que es mucho más difícil de leer. Esto solo me hace buscar otra herramienta, desafortunadamente.
Nicholas Petersen
1
¿Se dejó esto fuera de VS 2013?
Roger
3
@Roger No he usado VS 2013, pero creo que esta característica debería estar allí, asegúrese de que su proyecto esté dirigido a .NET 4.5 Framework
miszczu
2
Esto es mucho más rápido que xsd, pero la salida es casi la misma.
Jess
44
Si no tiene un compartidor, use regex y reemplace con public (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n=> public $1 $2 { get; set; }y `private \ w + \ w + Field; \ r \ n \ r \
n`
44

¡Al principio pensé que la pasta especial era el santo grial! Pero luego lo probé y mi cabello se volvió blanco al igual que la película de Indiana Jones.

Pero ahora uso http://xmltocsharp.azurewebsites.net/ y ahora soy tan joven como siempre.

Aquí hay un segmento de lo que generó:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }
D. Kermott
fuente
55
El resultado de esta herramienta es bueno, pero solo quiero hacer una advertencia para no enviar ningún dato confidencial a este sitio (o cualquier otro para el caso). Aunque aprecio el servicio que se ofrece, no hay una política de privacidad y poca o ninguna seguridad de que lo que pegue no se registra y se examinó, etc.
SvenAelterman
2
Tenía un archivo xml que tiene algunas relaciones recursivas (tal vez se llama relación circular, no estoy seguro). Los otros fallaron pero xmltocsharp.azurewebsites.net tuvo mucho éxito en ese xml.
Koray
44
@ D.Kermott gracias por el enlace al sitio web, lo he echado un vistazo rápido y parece que funciona mucho mejor que el especial de pegado, el código se ve más limpio, aunque mi prueba xml creó más clases, fue mucho más agradable de usar
Harag
Lástima que parece invertir el orden de las clases (elementos externos enumerados en último lugar)
Savage
22

Me doy cuenta de que esta es una publicación bastante antigua y que probablemente hayas seguido adelante.

Pero tuve el mismo problema que tú, así que decidí escribir mi propio programa.

El problema con la ruta "xml -> xsd -> classes" para mí fue que simplemente generó un trozo de código que era completamente imposible de mantener y terminé volcándolo.

De ninguna manera es elegante, pero hizo el trabajo por mí.

Puede obtenerlo aquí: haga sugerencias si lo desea.

SimpleXmlToCode

Garra
fuente
1
produce código incorrecto: // ELEMENTS [XmlIgnore] public DateTime Value {get; conjunto; } [XmlText] cadena pública ValueString {get {return Value? "verdadero Falso"; } establecer {Valor = valor == "verdadero"; }}
André Fiedler
Y los constructores son innecesarios + debe incluir comentarios para miembros visibles públicamente
André Fiedler
1
En mi defensa, fue algo que golpeé muy rápido, lo que funcionó para mí. No he vuelto a ello, pero siéntase libre de contribuir al repositorio con cualquier cambio.
Talon
He estado usando esto durante unos meses, no es perfecto, pero es bastante útil y creo que genera un XML mucho más legible / simple que el pegado como XML de VS2013. Muy apreciado Talon.
codechinchilla
6

Debe considerar svcutil ( pregunta de svcutil )

Tanto xsd.exe como svcutil funcionan en el archivo de esquema XML (.xsd). Su XML debe ajustarse a un archivo de esquema para ser utilizado por cualquiera de estas dos herramientas.

Tenga en cuenta que también existen varias herramientas de terceros para esto.

ng5000
fuente
3

Puede usar xsd como lo sugiere Darin.

Además de eso, se recomienda editar el archivo test.xsd para crear un esquema más razonable.

type="xs:string"se puede cambiar a type="xs:int"valores enteros
minOccurs="0"se puede cambiar a minOccurs="1"donde se requiere el campo se
maxOccurs="unbounded"puede cambiar amaxOccurs="1" donde solo se permite un elemento

Puede crear xsd-s más avanzados si desea validar aún más sus datos, pero esto al menos le dará tipos de datos razonables en el c # generado.

Albin Sunnanbo
fuente
1

Use la siguiente sintaxis para crear una clase de esquema a partir del archivo XSD.

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Kiran.Bakwad
fuente
0

Para convertir XML en una clase C #:

  • Navegue a Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • En la barra de búsqueda, ingrese el texto: - xml a la herramienta de código de clase
  • Descargue, instale y use la aplicación

Nota: en la totalidad del tiempo, esta aplicación puede ser reemplazada, pero es probable que haya otra herramienta que haga lo mismo.

J Wood
fuente