否则,除了在这篇文章中指出之外,我想在 XmlSerializer 开始反序列化之前采取行动(而不是在完成反序列化时)
背景:我有一个实现INotifyPropertyChanged
. 此 BaseClass 以 xml 形式存储在数据库中,并在检索时反序列化为对象实例。反序列化执行我的 ChangeNotification 发生的此类的设置器。在更改通知的集中处理程序上,我设置对象的状态并跟踪堆栈以撤消更改。显然我不希望在反序列化过程中触发这些。
任何想法都会非常受欢迎!
否则,除了在这篇文章中指出之外,我想在 XmlSerializer 开始反序列化之前采取行动(而不是在完成反序列化时)
背景:我有一个实现INotifyPropertyChanged
. 此 BaseClass 以 xml 形式存储在数据库中,并在检索时反序列化为对象实例。反序列化执行我的 ChangeNotification 发生的此类的设置器。在更改通知的集中处理程序上,我设置对象的状态并跟踪堆栈以撤消更改。显然我不希望在反序列化过程中触发这些。
任何想法都会非常受欢迎!
XmlSerializer 不支持序列化回调。一种选择是使用 IXmlSerializable,但工作量很大。在一些简单的情况下,DataContractSerializer 可能是一个可行的选择;它支持 cllbacks,但它不支持尽可能多的 XML 场景(最值得注意的是:没有属性)。
您可能不走运,在这种情况下,请考虑使用单独的 DTO 和域类型。例如,您可以反序列化 into FooDto
,然后将值复制到 a Foo
,手动告诉它这是通过序列化。
正如@Marc 的解决方案所评论的那样。目前最实用的方法(我正在为大量复杂功能开发概念证明)是在使用简单的公共 void 反序列化对象后默认该对象。在这种方法中,我可以清空撤消堆栈并将对象的状态设置为未更改。
如果我想出一些更好的想法,我会在这里发布。