나는 3 시간의 더 좋은 부분에 대해 머리를 때려 눕히는 데 문제가 있습니다.왜 XML 역 직렬화에 대한 OnDeserialization이 실행되지 않습니까?
[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");
}
}
내가 사용하고 :
<?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>
내가 간단한 클래스 구조를 가지고 : 나는
내가 간단한 XML 파일을 가지고 ... 내가 눈부시게 분명 뭔가를 놓친 것을 거의 확신 호출 코드와 클래스 파일 모두에서 다음과 같습니다.
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가 호출 될 것으로 예상된다는 것입니다.
나는 그것이 런타임 deserialization이 아닌 XML deserialization이고 아마도 잘못된 속성 이름을 사용하고 있을지도 모른다고 생각하지만 그것이 무엇인지 알 수는 없다.
의견이 있으십니까?
Darn. 그것은 매우 성가신 일입니다. 오 잘. deserialize 할 때 설정되지 않은 필드를 포함하는 해결 방법을 추가하고 내부 상태가 양호 할 때 다시 설정합니다. – Jonathan