2010-12-02 37 views
5

Soy bastante nuevo en XML en .net. Como parte de mi tarea, necesito crear la clase que se puede serializar a XML. Tengo un archivo XML de muestra con todas las etiquetas (la clase debe producir XML similar al archivo XML de muestra). ¿Cuál sería el mejor enfoque para crear la clase a partir de un archivo XML?Cómo crear una clase C# serializable desde el archivo XML

Gracias de antemano!

+0

¿ha tenido alguna suerte con alguno de los enfoques sugeridos? –

+0

¡Sí! Utilicé con éxito la herramienta xsd para generar la clase (tuve que hacer un par de cambios para cumplir con mis requisitos). – Grasshopper

+0

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx – Mou

Respuesta

10

Puede usar XSD.exe para crear un archivo .cs desde .xml. http://msdn.microsoft.com/en-us/library/x6c1kb0s%28VS.71%29.aspx

En la línea de comandos:

xsd myFile.xml 
xsd myFile.xsd 

La primera línea generará un archivo de definición de esquema (XSD), el segundo archivo debe generar un archivo .cs. No estoy seguro si la sintaxis es exacta, pero debería comenzar.

+2

47 segundos demasiado rápido para mí. +1. ¿Puedo agregar que '/ c' sería el formato de salida correcto? –

+0

+1 para el enfoque más rápido :) –

-1

he aquí un buen ejemplo de cómo serializar/deserializar un objeto. http://sharpertutorials.com/serialization/

+1

@Grasshopper pregunta por la generación de clases, no la serialización. Esto no aborda la pregunta. –

+0

Creo que podría estar equivocado allí: "crear la clase que se puede serializar a XML". El requisito real es un poco vago. –

+0

Mi error, publiqué la respuesta a las 3 AM, antes de acostarme :) – Davita

4

Trabajar al revés puede ser útil: cree su clase primero, luego serialice y vea lo que obtiene.

Para las clases más simples, en realidad es bastante fácil. Puede utilizar XmlSerializer para serializar, como:

 
namespace ConsoleApplication1 
{ 
    public class MyClass 
    { 
     public string SomeProperty 
     { 
      get; 
      set; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); 
      TextWriter writer = new StreamWriter(@"c:\temp\class.xml"); 

      MyClass firstInstance = new MyClass(); 
      firstInstance.SomeProperty = "foo"; // etc 

      serializer.Serialize(writer, firstInstance); 
      writer.Close(); 

      FileStream reader = new FileStream(@"c:\temp\class.xml", FileMode.Open); 

      MyClass secondInstance = (MyClass)serializer.Deserialize(reader); 

      reader.Close(); 
     } 
    } 
} 

Esto escribirá una representación serializada de su clase en XML a "c: \ temp \ class.xml". Podrías echar un vistazo y ver lo que obtienes. A la inversa, puede usar serializer.Deserialize para crear una instancia de la clase desde "c: \ temp \ class.xml".

Puede modificar el comportamiento de la serialización, y tratar con nodos inesperados, etc. - vea por ejemplo the XmlSerializer MSDN page.

Cuestiones relacionadas