Pregunta

Estoy escribiendo una pequeña aplicación en VB.NET y me gustaría que algunas de las clases puedan escribirse en XML para que sirva como " guardar " característica. He visto archivos XSD utilizados para generar clases de VB que pueden serializarse dentro y fuera de XML con mucha facilidad. ¿Cómo haría esto si tengo un formato XML preexistente con el que necesito cumplir ya que solo estoy creando las clases?

¿Fue útil?

Solución

Utilice los espacios de nombres System.Xml y System.Xml.Serialization. Describen las clases que puede usar para anotar a los miembros de sus clases con la etiqueta correspondiente.

Por ejemplo (en C #):

[XmlRoot("foo")]
public class Foo
{
     [XmlAttribute("bar")] 
     public string bar;
     [XmlAttribute("baz")] 
     public double baz;
}

O en VB.NET (puede que no sea completamente sintácticamente correcto):

<XmlRoot ("foo")> _
Public Class Foo
     <XmlAttribute ("bar")>_
     Public bar As String
     <XmlAttribute ("baz")>_
     Public baz As String
End Class

Luego puede usar la clase XmlSerializer para generar XML.

En C #:

using(XmlSerializer xmls = new XmlSerializer(typeof(Foo)){
    TextWriter tw = new StreamWriter( "foo.xml" );
    //use it!
}

O VB:

Using xmls As New XmlSerializer(gettype(Foo)), _
    tw As TextWriter = New StreamWriter("foo.xml")

    ''//use it!
End Using

Referencia .

Otros consejos

Ya que preguntaste acerca de hacerlo "fácil", hay tres reglas a seguir que te ayudarán a mantener las cosas muy simples:

  1. Utilice solo tipos de propiedad que sean serializables
  2. No utilice colecciones o arreglos como propiedades que necesitan ser serializadas
  3. No tiene propiedades con " mal " efectos secundarios. Por "malo", me refiero principalmente a dos propiedades públicas que están respaldadas por el mismo campo privado subyacente.

Tenga en cuenta que si rompe estas reglas, probablemente aún pueda serializar su clase, pero es probable que sea mucho más trabajo.

Para el elemento # 2, una solución rápida es usar un conjunto de datos o datos, ya que son serializables.

Para ir con una función simple de "guardar", use la serialización .net xml [1] o cree un n en la memoria de DateSet para conservar el "estado del mundo" en tantas Tablas de fechas como desee. Más bien depende de qué tan completo sea el modelo de objetos que intenta conservar.

[1] el ejemplo más simple que pude encontrar rápidamente (C #, lo siento pero obtendrás la esencia) http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

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