Pregunta

Tengo un XML que quiero cargar en objetos, manipular esos objetos (establecer valores, leer valores) y luego guardar esos XML nuevamente.Para mí es importante tener el XML en la estructura (xsd) que creé.

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

¿Fue útil?

Solución

Puede generar clases C# serializables a partir de un esquema (xsd) usando xsd.exe:

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

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

Otros consejos

Este código (C# DotNet 1.0 en adelante) funciona bastante bien para serializar la mayoría de los objetos en XML.(y de regreso) no funciona para objetos que contienen listas de matrices, y si es posible, se adhieren a usar solo matrices

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 a XML es muy poderoso si estás usando .net 3.5, LINQ a XSD ¡puede que también te sea útil!

Utilice el programa de línea de comandos xsd.exe que viene con Visual Studio para crear archivos de clase que pueda 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.

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

xsd file.xsd {/classes | /DataSet} [/elemento: elemento] [/idioma: lenguaje] [/espacio de nombres: espacio de nombres] [/outputdir: directorio] [uri: uri] que tomará sus archivos XSD y creará clases C# o VB.NET de ellos.

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 desde XSD y funciona fantástico.Si tiene un generador de esquemas como XML spy;cree un xsd desde su xml y use esta herramienta.He creado clases muy, muy complejas usando esta herramienta.Luego cree clases parciales para propiedades/métodos adicionales, etc., luego, cuando actualice su esquema, simplemente regenerará sus clases y cualquier edición persistirá en sus clases parciales.

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

xsd.exe de Microsoft tiene muchos errores: | Prueba esta perla de código abierto http://xsd2code.codeplex.com/

Hemos creado un marco que puede generar automáticamente clases de C# a partir de su XML.Es una plantilla de elemento visual a la que le 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 de elementos de Visual C#: haga clic aquí

Apuesto a que NetDataContractSerializer puede hacer lo que quieras.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top