Pregunta

Crea una clase (llamada él FormElement). Esa clase debe tener algunas propiedades como los metadatos que tienen con los elementos de datos (nombre, número de secuencia, valor que es sólo una cadena, etc).

Esta clase tiene como atributos del tipo de aplicación Validación clases Bloque de validación.

quiero serializar a XML y deserializar ella. Verificar que todas las propiedades de la clase que incluye los atributos de bloque solicitud de validación sobreviven serialización.

alguna sugerencia?

No hay solución correcta

Otros consejos

El marco .NET tiene esta incorporada, usando C # que lo haría así:

// This code serializes a class instance to an XML file:
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextWriter writer = new StreamWriter(xmlFileName))
{
     xs.Serialize(writer, InstanceOfObjectToSerialize);
} 

Y este fragmento es un ejemplo de cómo deserializar un archivo XML de nuevo a una instancia de clase:

// this code creates a class instance from the file we just made:
objectToSerialize newObject;
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextReader reader = new StreamReader(xmlFileName))
{
    newObject = (ObjectToSerialize) xs.Deserialize(reader);
}

Debe marcar su clase con el atributo [Serializable] para que éstos trabajan. Si desea hacer su salida XML bastante un poco más, puede utilizar [XmlElement] y [XmlAttribute] atributos en sus propiedades de clase de tenerlos serializar en su esquema de elección.

Al decir serializar, ¿quiere decir utilizar el mecanismo oficial de serialización, o lograr un efecto similar?

Si los objetos son los frijoles, se podría utilizar la reflexión para escribir un servicio general que toma una clase y escribe su nombre de clase y propiedades. Se puede leer de manera similar los materiales del XML y generar el objeto (que es lo que hace esencialmente Apache digestor).

Lo que dijo Jonathon Holanda.

Sin embargo, también se preguntó acerca de la validación. Si se utiliza el código Jonathan ha escrito, todas sus propiedades serializar y deserializar correctamente. Pero si realmente quieres comprobarlo, hay una propiedad se puede establecer con el objeto XmlSerializer para un esquema .xsd * para validar contra. Puede crear el esquema con bastante facilidad de su clase con la función xsd.exe de línea de comandos que se incluye con Visual Studio.

Además, parece que es posible que desee controlar si ciertas propiedades de su clase son serializados como atributos o elementos. Jonathon se refirió a eso, pero quiero mostrar un ejemplo:

[Serializable]
public class FormElement
{
   [XmlAttribute]
   public string Name {get; set;};

   [XmlAttribute]
   public int Sequence {get; set;};

   [XmlAttribute]
   public string Value {get; set;};

   [XmlElement]
   public Validation OnValidate{get; set;}

   [NonSerialized]
   public string UnimportantProperty {get; set;};

}

Por último, el tipo para cada propiedad que desea realizar una serie también debe ser serializable, y los tipos complicados deben ser serializados como XmlElements. De lo contrario no será capaz de hacerlo.

xstream es una muy buena biblioteca de java para hacer precisamente eso.

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