我有一個應用程序的設置對象,它有兩個集合。這些集合很簡單包含一組屬性包的列表泛型。當我序列化,一切都被保存沒有問題:反序列化泛型集合 - 即將到來
XmlSerializer x = new XmlSerializer(settings.GetType());
TextWriter tw = new StreamWriter(@"c:\temp\settings.cpt");
x.Serialize(tw, settings);
然而,當我反序列化,一切都恢復了除兩個集合(通過設置的制定者斷點驗證:
XmlSerializer x = new XmlSerializer(typeof(CourseSettings));
XmlReader tr = XmlReader.Create(@"c:\temp\settings.cpt");
this.DataContext = (CourseSettings)x.Deserialize(tr);
什麼會導致這一點?一切都很香草......這裏是設置對象的一個片段...省略了大部分。PresentationSourceDirectory工作正常,但是PresentationModules的setter沒有命中:
private string _presentationSourceDirectory = string.Empty;
public string PresentationSourceDirectory {
get { return _presentationSourceDirectory; }
set {
if (_presentationSourceDirectory != value) {
OnPropertyChanged("PresentationSourceDirectory");
_presentationSourceDirectory = value;
}
}
}
private List<Module> _presentationModules = new List<Module>();
public List<Module> PresentationModules {
get {
var sortedModules = from m in _presentationModules
orderby m.ModuleOrder
select m;
return sortedModules.ToList<Module>();
}
set {
if (_presentationModules != value) {
_presentationModules = value;
OnPropertyChanged("PresentationModules");
}
}
}
好吧,這是有道理的,但我不清楚我的選擇是如何解決這個問題。看來我必須在修改我的對象後返回並實現自定義序列化程序/ de,以便它不會接受集合的setter ...是唯一的選擇嗎? – 2010-04-04 10:48:31
我已經更新了我的答案。也許這就是你想要的。您在設置者中調用的事件是否是一項要求? – chriszero 2010-04-04 17:43:05
感謝chriszero ......現在有些工作要做......非常感謝! – 2010-04-05 11:04:21