Deserializar XML a objetos en C #

Entonces tengo xml que se ve así:

 #{id} #{name} #{description} #{project_id} #{milestone_id} #{position}  #{private}  #{tracked}    ...   ...  ...   

¿Cómo podría utilizar la biblioteca de serialización de .NET para deserializar esto en objetos C #?

Actualmente estoy usando la reflexión y mapeo entre el xml y mis objetos usando las convenciones de nomenclatura.

Cree una clase para cada elemento que tenga una propiedad para cada elemento y una Lista o matriz de objetos (use la creada) para cada elemento secundario. Luego llame a System.Xml.Serialization.XmlSerializer.Deserialize en la cadena y eche el resultado como su objeto. Use los atributos System.Xml.Serialization para realizar ajustes, como asignar el elemento a su clase ToDoList, use el atributo XmlElement (“todo-list”).

Un shourtcut es cargar su XML en Visual Studio, hacer clic en el botón “Inferir esquema” y ejecutar “xsd.exe / c schema.xsd” para generar las clases. xsd.exe está en la carpeta de herramientas. A continuación, revise el código generado y haga los ajustes necesarios, como cambiar de pantalón corto a blanco.

Se reduce a usar xsd.exe desde herramientas en VS:

 xsd.exe "%xsdFile%" /c /out:"%outDirectory%" /l:"%language%" 

Luego cárguelo con lector y deserializador:

 public GeneratedClassFromXSD GetObjectFromXML() { var settings = new XmlReaderSettings(); var obj = new GeneratedClassFromXSD(); var reader = XmlReader.Create(urlToService, settings); var serializer = new System.Xml.Serialization.XmlSerializer(typeof(GeneratedClassFromXSD)); obj = (GeneratedClassFromXSD)serializer.Deserialize(reader); reader.Close(); return obj; } 

Deserializar cualquier objeto, siempre que el tipo T esté marcado Serializable:

 function T Deserialize(string serializedResults) { var serializer = new XmlSerializer(typeof(T)); using (var stringReader = new StringReader(serializedResults)) return (T)serializer.Deserialize(stringReader); } 

Bueno, tendría que tener clases en su ensamblaje que coincidan, más o menos, con el XML (propiedad llamada Private, una propiedad de colección llamada ToDo, etc.).

El problema es que el XML tiene elementos que no son válidos para los nombres de las clases . Por lo tanto, debe implementar IXmlSerializable en estas clases para controlar cómo se serializan desde y hacia XML. También puede salirse con la suya usando algunos de los atributos específicos de serialización xml, pero eso depende del esquema de su xml.

Eso es un paso más arriba usando la reflexión, pero puede que no sea exactamente lo que estás esperando.

Pago y envío http://xsd2code.codeplex.com/

Xsd2Code es un generador de clase de Entidad comercial de CSharp o Visual Basic del esquema XSD.

Hay un par de opciones diferentes.

  • Visual Studio incluye un progtwig de línea de comando llamado xsd.exe. Utiliza ese progtwig para crear un documento de esquema y usa el progtwig nuevamente en el documento de esquema para crear clases que puedes usar con system.xml.serialization.xmlserializer
  • Es posible que solo pueda llamar a Dataset.ReadXml () en él.

Deberías echarle un vistazo a http://www.canerten.com/xml-c-class-generator-for-c-using-xsd-for-deserialization/

Hay una herramienta (Microsoft) que ayuda a crear el XSD necesario para deserializar correctamente XML en un objeto

tuve las mismas preguntas hace unos años que cómo mapear xml a clases de C # o crear clases de C # que se asignan a nuestros XML, JST como hacemos en el marco de la entidad (asignamos tablas a clases de C #). Creé un framework finalmente, que puede crear clases C # a partir de su XML y estas clases se pueden utilizar para leer / escribir su xml. Echa un vistazo