@drzaus Tenía este trabajo en el pasado, pero ahora cuando agrego uno se genera como una clase DataSet en lugar de las clases que esperaría. Solo agrego un elemento existente y selecciono el archivo XSD.
msmucker0527
Respuestas:
490
Suficientemente simple; simplemente ejecute (en el símbolo del sistema vs)
xsd your.xsd /classes
(que creará your.cs). Sin embargo, tenga en cuenta 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 /enableDataBindingpuede ser útil.
"C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ xsd.exe" / classes / language: CS your.xsd
GeorgesC
2
Gravell al rescate otra vez! Aunque esta respuesta es 100% correcta, en mi caso me pareció más fácil agregar la ruta del directorio xsd.exe a la variable de entorno PATH. Mi computadora -> propiedades -> avanzado -> variables de entorno -> Ruta - y agrego "C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Herramientas \" (por supuesto preste mucha atención a las versiones de Windows y .NET específicas de su máquina) - ¡codificación feliz!
pimbrouwers
15
Para el caso, tiene varias definiciones de esquema interconectadas, solo asígneles un nombre. xsd schema1.xsd schema2.xsd schema3.xsd /c
mivra
56
xsd.exe como lo menciona Marc Gravell. La forma más rápida de comenzar a usar IMO.
No pude conseguir que xsd2code funcionara para mí. xsd.exe es más robusto, pero tiene problemas con los esquemas que tienen grupos "circulares".
Jeff el
xsd2code funciona en visual studio 2017 y era exactamente lo que estaba buscando. primero debe ejecutarlo en el directorio de archivos de programa (x86), luego usar el instalador vsix. entonces funciona muy bien. fue SUPER SUPERIOUR para el xsd.exe que generó matrices [] [] en lugar de lists.i tenía un .xsd gigante y necesito crear clases para serializar el XML. xsd.exe no generaría código serializable (.net core 2) y xsd2code funcionó muy bien
Le muestro aquí la forma más fácil de usar Vs2017 y Vs2019 Abra su xsd con Visual Studio y genere un archivo xml de muestra como se sugiere en la url .
Una vez que abrió su xsd en la vista de diseño como se muestra a continuación, haga clic en el explorador de esquemas xml
2. Dentro del "Explorador de esquemas XML", desplácese hacia abajo para encontrar el nodo raíz / de datos. Haga clic derecho en el nodo raíz / datos y se mostrará "Generar XML de muestra". Si no se muestra, significa que no está en el nodo del elemento de datos pero sí en cualquiera de los nodos de definición de datos.
Copie su Xml generado en el portapapeles
Cree una nueva clase vacía en su solución y elimine la definición de clase. Solo debe permanecer el espacio de nombres
Mientras el puntero del mouse se enfoca dentro de su clase, elija EDITAR-> Pegar especial-> Pegar Xml como clases
Desafortunadamente, esto no garantiza generar todas las clases, pero es un truco COOL.
John Zabroski
1
@JohnZabroski, ¿tuvo algún caso de que no funcionó para usted? Depende de xml de muestra, si puede crear xml de muestra con todas las clases y miembros, no hay razón para perder ninguna clase y miembro.
Batmaci
Mi punto es que el paso 2 no garantiza que funcione. Pero es un truco genial.
John Zabroski
Maravillosa respuesta. Te mereces unas cervezas frías !!
HenryGuillen17
14
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, uso Xsd2Code. Xsd2Code maneja bien las referencias circulares y funciona dentro del VS IDE, 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. Sin embargo, 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 de los dos funciona bien con la función de elección. terminarás con listas / colecciones de objetos en lugar del tipo que deseas. Recomendaría evitar la elección en su xsd si es posible ya que esto no serializa / deserializa bien en una clase fuertemente tipada. Sin embargo, si no te importa esto, entonces no es un problema.
Cualquier función en xsd2code se deserializa como System.Xml.XmlElement, lo cual me parece realmente conveniente, pero puede ser un problema si desea objetos con tipos fuertes. A menudo uso cualquiera cuando permito datos de configuración personalizados, por lo que es conveniente pasar un XmlElement a otro deserializador XML que esté definido de forma personalizada en otro lugar.
Agregué xsd2code mirando tu respuesta. ¿Necesitamos cambiar algo para que se encargue de las referencias de grupo circulares? No funciona para mí con las propiedades predeterminadas
Jyotsna Sonawane
No tuve que hacer nada especial para que funcionara con referencias circulares. Si publica el xml como una nueva pregunta y agrega un enlace aquí, me alegra echarle un vistazo.
VoteCoffee
10
Para una solución rápida y perezosa , (y no usar VS en absoluto) pruebe estos convertidores en línea:
<?xml version="1.0" encoding="utf-8"?><!--Created with LiquidTechnologiesOnlineTools1.0(https://www.liquid-technologies.com) --><shiporder xsi:noNamespaceSchemaLocation="schema.xsd" orderid="string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><orderperson>string</orderperson><shipto><name>string</name><address>string</address><city>string</city><country>string</country></shipto><item><title>string</title><note>string</note><quantity>3229484693</quantity><price>-6894.465094196054907</price></item><item><title>string</title><note>string</note><quantity>2181272155</quantity><price>-2645.585094196054907</price></item><item><title>string</title><note>string</note><quantity>2485046602</quantity><price>4023.034905803945093</price></item><item><title>string</title><note>string</note><quantity>1342091380</quantity><price>-810.825094196054907</price></item></shiporder>
Que se convierte a esta estructura de clase:
/*
Licensed under the Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0
*/
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace Xml2CSharp{[XmlRoot(ElementName="shipto")]publicclassShipto{[XmlElement(ElementName="name")]publicstringName{get;set;}[XmlElement(ElementName="address")]publicstringAddress{get;set;}[XmlElement(ElementName="city")]publicstringCity{get;set;}[XmlElement(ElementName="country")]publicstringCountry{get;set;}}[XmlRoot(ElementName="item")]publicclassItem{[XmlElement(ElementName="title")]publicstringTitle{get;set;}[XmlElement(ElementName="note")]publicstringNote{get;set;}[XmlElement(ElementName="quantity")]publicstringQuantity{get;set;}[XmlElement(ElementName="price")]publicstringPrice{get;set;}}[XmlRoot(ElementName="shiporder")]publicclassShiporder{[XmlElement(ElementName="orderperson")]publicstringOrderperson{get;set;}[XmlElement(ElementName="shipto")]publicShiptoShipto{get;set;}[XmlElement(ElementName="item")]publicList<Item>Item{get;set;}[XmlAttribute(AttributeName="noNamespaceSchemaLocation",Namespace="http://www.w3.org/2001/XMLSchema-instance")]publicstringNoNamespaceSchemaLocation{get;set;}[XmlAttribute(AttributeName="orderid")]publicstringOrderid{get;set;}[XmlAttribute(AttributeName="xsi",Namespace="http://www.w3.org/2000/xmlns/")]publicstringXsi{get;set;}}}
¡Atención! Tenga en cuenta que esto es solo para comenzar, ¡los resultados obviamente necesitan mejoras!
La respuesta de Marc Gravells fue adecuada para mí, pero mi xsd tenía una extensión de .xml. Cuando usé el programa xsd me dio: - The table (Amt) cannot be the child table to itself in nested relations.
Utilicé xsd.exeen el símbolo del sistema de Windows.
Sin embargo, dado que mi xml hizo referencia a varios xml en línea (en mi caso, http://www.w3.org/1999/xlink.xsdque 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: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Tools \ xsd.exe" / classes / language: CS your.xsd xlink.xsd xml.xsd
Ese no sería el mercado de Amazon XSD donde creaste clases por ahora, ¿verdad? :-) Tuve que trabajar con ellos una vez, nunca más los tocaré o haré ningún trabajo en C # usando archivos XSD de Amazon, hay tal desastre es irreal.
Shawty
@shawty Estaba trabajando con estándares GIS - WFS y WMS - que se definen por XSD grandes, circulares y con referencias cruzadas. Fue un gran lío xsd.exeporque no le gustan las referencias circulares, pero al final tuve éxito.
Aske B.
sí, esa hubiera sido mi segunda suposición. Visto que son demasiado, emabrgo no tan malo como material Amazonas, aunque ... me da pesadillas recordando estremecimientos
Shawty
0
Junto con WSDL, tenía archivos xsd. Lo anterior no funcionó en mi caso dio error. Funcionó de la siguiente manera
Respuestas:
Suficientemente simple; simplemente ejecute (en el símbolo del sistema vs)
(que creará
your.cs
). Sin embargo, tenga en cuenta que la mayoría de las opciones intrínsecas aquí no han cambiado mucho desde 2.0Para las opciones, use
xsd /?
o vea MSDN ; Por ejemplo/enableDataBinding
puede ser útil.fuente
xsd schema1.xsd schema2.xsd schema3.xsd /c
xsd.exe como lo menciona Marc Gravell. La forma más rápida de comenzar a usar IMO.
O si necesita más flexibilidad / opciones:
Complemento xsd2code VS (Codeplex)
fuente
Le muestro aquí la forma más fácil de usar Vs2017 y Vs2019 Abra su xsd con Visual Studio y genere un archivo xml de muestra como se sugiere en la url .
2. Dentro del "Explorador de esquemas XML", desplácese hacia abajo para encontrar el nodo raíz / de datos. Haga clic derecho en el nodo raíz / datos y se mostrará "Generar XML de muestra". Si no se muestra, significa que no está en el nodo del elemento de datos pero sí en cualquiera de los nodos de definición de datos.
fuente
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, uso Xsd2Code. Xsd2Code maneja bien las referencias circulares y funciona dentro del VS IDE, 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. Sin embargo, 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 de los dos funciona bien con la función de elección. terminarás con listas / colecciones de objetos en lugar del tipo que deseas. Recomendaría evitar la elección en su xsd si es posible ya que esto no serializa / deserializa bien en una clase fuertemente tipada. Sin embargo, si no te importa esto, entonces no es un problema.
Cualquier función en xsd2code se deserializa como System.Xml.XmlElement, lo cual me parece realmente conveniente, pero puede ser un problema si desea objetos con tipos fuertes. A menudo uso cualquiera cuando permito datos de configuración personalizados, por lo que es conveniente pasar un XmlElement a otro deserializador XML que esté definido de forma personalizada en otro lugar.
fuente
Para una solución rápida y perezosa , (y no usar VS en absoluto) pruebe estos convertidores en línea:
Ejemplo XSD:
Convierte a XML:
Que se convierte a esta estructura de clase:
¡Atención! Tenga en cuenta que esto es solo para comenzar, ¡los resultados obviamente necesitan mejoras!
fuente
Lo uso
XSD
en un script por lotes para generar.xsd
archivos y clasesXML
directamente:fuente
El comando que funcionó en mi caso fue:
fuente
La respuesta de Marc Gravells fue adecuada para mí, pero mi xsd tenía una extensión de .xml. Cuando usé el programa xsd me dio:
- The table (Amt) cannot be the child table to itself in nested relations.
Según este KB325695 , renombré la extensión de .xml a .xsd y funcionó bien.
fuente
Utilicé
xsd.exe
en el símbolo del sistema de Windows.Sin embargo, dado que mi xml hizo referencia a varios xml en línea (en mi caso,
http://www.w3.org/1999/xlink.xsd
que hace referenciahttp://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:fuente
xsd.exe
porque no le gustan las referencias circulares, pero al final tuve éxito.Junto con WSDL, tenía archivos xsd. Lo anterior no funcionó en mi caso dio error. Funcionó de la siguiente manera
fuente