私は 3 時間のほとんどの間、頭を悩ませてきた問題を抱えています。目がくらむほど明白な何かを見逃したことはほぼ確実です...
単純な 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>
私は単純なクラス構造を持っています:
[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");
}
}
呼び出しコードとクラス ファイルの両方でこれらを使用しています。
using System.Xml.Serialization;
using System.Runtime.Serialization;
私はいくつかの呼び出しコードを持っています:
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);
問題は、OnDeserialized_Method が呼び出されることを期待しているのに、そうではないことです。
ランタイム逆シリアル化ではなく XML 逆シリアル化であるという事実と関係があるのではないかと思います。おそらく間違った属性名を使用していますが、それが何であるかはわかりません。
皆さん、何かアイデアはありますか?