Tengo un problema con el que me he estado golpeando la cabeza durante la mayor parte de las tres horas. Estoy casi seguro de que me he perdido algo salta a la vista ...¿Por qué OnDeserialization no se activa para la deserialización de XML?
que tienen un simple archivo XML:
<?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>
que tienen una estructura de clases sencilla:
[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");
}
}
estoy usando éstos tanto en código de llamada y en los archivos de clase:
using System.Xml.Serialization;
using System.Runtime.Serialization;
que tienen algún 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 a OnDeserialized_Method, y no lo es.
Sospecho que podría tener algo que ver con el hecho de que se trata de deserialización XML en lugar de deserialización en tiempo de ejecución, y tal vez estoy usando el nombre de atributo incorrecto, pero no puedo averiguar cuál podría ser.
Cualquier idea, amigos?
Darn. Eso es muy molesto Oh bien. He agregado una solución alternativa que implica un campo que se desarma cuando deserializo, y se establece de nuevo cuando el estado interno es bueno. – Jonathan