visual studio serialize example deserialize convert c# xml-deserialization

studio - xml to list object c#



¿Por qué no se desencadena OnDeserialization para la Deserialización XML? (2)

La única forma en que podría hacerlo de una manera elegante es implementar manualmente IXmlSerializable , lo cual no es divertido. Simplemente; XmlSerializer no admite devoluciones de llamada de serialización.

A veces, sin embargo, puede cambiar a DataContractSerializer , que aún ofrece capacidades xml pero que admite devoluciones de llamada de serialización. Desafortunadamente, las opciones xml son limitadas : no funcionará para su estructura xml, ya que utiliza atributos ( DataContractSerializer solo admite elementos).

También puede mirar los comentarios en esta respuesta , que trata los puntos de esto.

Tengo un problema con el que he estado golpeando mi cabeza durante casi tres horas. Estoy casi seguro de que me he perdido algo cegadoramente obvio ...

Tengo un archivo XML simple:

<?xml version="1.0" encoding="utf-8"?> <WeightStore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Records> <Record actual="150" date="2010-05-01T00:00:00" /> <Record actual="155" date="2010-05-02T00:00:00" /> </Records> </WeightStore>

Tengo una estructura de clase simple:

[Serializable] public class Record { [XmlAttribute("actual")] public double weight { get; set; } [XmlAttribute("date")] public DateTime date { get; set; } [XmlIgnore] public double trend { get; set; } } [Serializable] [XmlRoot("WeightStore")] public class SimpleWeightStore { [XmlArrayAttribute("Records")] private List<Record> records = new List<Record>(); public List<Record> Records { get { return records; } } [OnDeserialized()] public void OnDeserialized_Method(StreamingContext context) { // This code never gets called Console.WriteLine("OnDeserialized"); } }

Los estoy usando tanto en el código de llamada como en los archivos de clase:

using System.Xml.Serialization; using System.Runtime.Serialization;

Tengo un código de llamada:

SimpleWeightStore weight_store_reload = new SimpleWeightStore(); TextReader reader = new StringReader(xml); XmlSerializer deserializer = new XmlSerializer(weight_store.GetType()); weight_store_reload = (SimpleWeightStore)deserializer.Deserialize(reader);

El problema es que estoy esperando que se llame al Método OnDeserialized, y no lo es.

Sospecho que podría tener algo que ver con el hecho de que es la deserialización de XML en lugar de la deserialización en tiempo de ejecución, y tal vez esté usando el nombre de atributo incorrecto, pero no puedo averiguar cuál podría ser.

¿Alguna idea, amigos?