Cómo mapeo XML a objetos C #

Tengo un XML que quiero cargar a los objetos, manipular esos objetos (establecer valores, leer valores) y luego guardar esos XML de nuevo. Es importante para mí tener el XML en la estructura (xsd) que creé.

Una forma de hacerlo es escribir mi propio serializador, pero ¿hay un soporte integrado para él o código abierto en C # que pueda usar?

Puede generar clases C # serializables desde un esquema (xsd) usando xsd.exe:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir 

Si el esquema tiene dependencias (incluidos / esquemas importados), todos deben estar incluidos en la misma línea de comando.

Este código (C # DotNet 1.0 en adelante) funciona bastante bien para serializar la mayoría de los objetos a XML. (y viceversa) No funciona para objetos que contengan ArrayLists, y si es posible, conserve solo el uso de Arrays

 using System; using System.IO; using System.Text; using System.Xml.Serialization; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; public static string Serialize(object objectToSerialize) { MemoryStream mem = new MemoryStream(); XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType()); ser.Serialize(mem, objectToSerialize); ASCIIEncoding ascii = new ASCIIEncoding(); return ascii.GetString(mem.ToArray()); } public static object Deserialize(Type typeToDeserialize, string xmlString) { byte[] bytes = Encoding.UTF8.GetBytes(xmlString); MemoryStream mem = new MemoryStream(bytes); XmlSerializer ser = new XmlSerializer(typeToDeserialize); return ser.Deserialize(mem); } 

¡LINQ to XML es muy poderoso si está utilizando .net 3.5, LINQ to XSD puede ser útil para usted también!

Use el progtwig de línea de comandos xsd.exe que viene con Visual Studio para crear archivos de clase que puede usar en su proyecto / solución, y el espacio de nombres System.Xml.Serialization (específicamente, la clase XmlSerializer) para serializar / deserializar esas clases hacia y desde disco.

utilizando System.Xml.Serialization; este espacio de nombres tiene todos los atributos que necesitará si desea asignar su xml a cualquier objeto aleatorio. Alternativamente, puede usar la herramienta xsd.exe

xsd file.xsd {/ classes | / dataset} [/ element: element] [/ language: language] [/ namespace: namespace] [/ outputdir: directory] [URI: uri] que tomará sus archivos xsd y creará clases de c # o vb.net.

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

Estoy de acuerdo en que xsd es realmente una mierda … Pero hicieron otra versión que casi nadie conoce. Se llama generador de objetos xsd. Es la próxima versión y tiene muchas más opciones. Genera archivos de XSD y funciona de manera fantástica. Si tiene un generador de esquema como XML espía; crea un xsd de tu xml y usa esta herramienta. Creé clases muy complejas usando esta herramienta. Luego crea clases parciales para propiedades / métodos adicionales, etc. Luego, cuando actualices tu esquema, solo regenerarás tus clases y las ediciones subsistirán en tus clases parciales.

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7075

xsd.exe de Microsoft tiene muchos errores: | Prueba esta fuente abierta http://xsd2code.codeplex.com/

Hemos creado un marco que puede autogenerar clases C # fuera de su XML. Es una plantilla de elementos visuales a la que pasa su XML y las clases se generan automáticamente en su proyecto. Usando estas clases puedes crear / leer / escribir tu XML.

Consulte este enlace para ver el marco y la plantilla del elemento de Visual C #: haga clic aquí

Apuesto que NetDataContractSerializer puede hacer lo que quieras.