挂钩到OnDeserializing for XmlSerializer

时间:2011-03-07 14:55:16

标签: c# inotifypropertychanged xmlserializer xml-deserialization

除了在this post中指出,我想在XmlSerializer开始反序列化之前采取行动(而不是在完成反序列化时)

背景:我有一个实现INotifyPropertyChanged的baseClass。此BaseClass作为xml存储在数据库中,并在检索时反序列化为对象实例。反序列化执行此类的setter,我的ChangeNotification发生在该setter中。在用于更改通知的集中处理程序上,我设置了对象的状态并跟踪堆栈以撤消更改。显然我不希望在反序列化期间将这些变为triger。

非常欢迎任何想法!

2 个答案:

答案 0 :(得分:2)

XmlSerializer不支持序列化回调。一种选择是使用IXmlSerializable,但这是很多工作。在一些简单的情况下,DataContractSerializer可能是一个可行的选择;它支持cllbacks,但它不支持尽可能多的XML场景(最值得注意的是:没有属性)。

您可能运气不好,在这种情况下请考虑单独的DTO和域类型。例如,您可以反序列化为FooDto,然后将值复制到Foo,手动告诉它这是通过序列化。

答案 1 :(得分:1)

评论@ Marc的解决方案。现在最实用的方法(我正在开发大量复杂功能的概念证明)是在用简单的公共空间反序列化后对象的默认值。在这个方法中,我可以清空撤销堆栈并将对象的状态设置为不变。

如果我想出一些更好的想法,我会在这里发布。