2

否则,除了在这篇文章中指出之外,我想在 XmlSerializer 开始反序列化之前采取行动(而不是在完成反序列化时)

背景:我有一个实现INotifyPropertyChanged. 此 BaseClass 以 xml 形式存储在数据库中,并在检索时反序列化为对象实例。反序列化执行我的 ChangeNotification 发生的此类的设置器。在更改通知的集中处理程序上,我设置对象的状态并跟踪堆栈以撤消更改。显然我不希望在反序列化过程中触发这些。

任何想法都会非常受欢迎!

4

2 回答 2

2

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

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

于 2011-03-07T15:02:47.977 回答
1

正如@Marc 的解决方案所评论的那样。目前最实用的方法(我正在为大量复杂功能开发概念证明)是在使用简单的公共 void 反序列化对象后默认该对象。在这种方法中,我可以清空撤消堆栈并将对象的状态设置为未更改。

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

于 2011-03-08T09:30:46.360 回答