Deserialización XML: convierte el valor del atributo en clase automáticamente (.net)

StackOverflow https://stackoverflow.com/questions/421660

  •  05-07-2019
  •  | 
  •  

Pregunta

(vb.net/c#/etc)

Estoy teniendo problemas para descubrir cómo hacer un poco de magia de deserialización. Actualmente, la deserialización estándar funciona bien, incluidas las enumeraciones, pero ahora quiero convertir un atributo en una clase. Oh! ¡Qué estaba pensando !

Mi xml se ve un poco así:

....
<review user="..." version="2.2">...</review>

Y esto para mi propiedad / clase:

[XmlAttribute("version")]
public MyVersion Version { get; set; }

class MyVersion  {
    // equality overloaded
    // can ctype() from string to MyVersion
    // constructor that takes a single string, etc
}

¿Cómo puedo ayudar al serializador para que pueda deserializar automáticamente mi propiedad de cadena en esta clase? ¿Debo modificar la clase MyVersion de alguna manera o cambiar la definición de la propiedad?

  • No quiero tener que anular ningún método como OnDeserialized, etc. No vale la pena para este proyecto.

Si esto no se puede hacer con el deserializador xml predeterminado, sería suficiente saberlo. Hay muchas cosas para las que no es bueno, así que no me sorprendería.

¡Gracias!

¿Fue útil?

Solución

Esto no se admite de manera declarativa. Deberá implementar IXmlSerializable en la clase primaria (la que se serializa en un elemento) y realizar la conversión entre la cadena y el tipo MyValue manualmente.

Otros consejos

Podría hacer esto con bastante facilidad, pero no como una acción de deserialización.

Use XSD para crear sus clases para la deserialización. NO todas estas son clases parciales, por lo que puede escribir una nueva parte de la clase de revisión (que contiene el atributo 'versión') y agregar un método que obtenga / establezca la versión.

En el método get simple, cree una nueva instancia de esa clase y en el método set simple, actualice la versión existente de la clase de versión suministrada.

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