对象xml反序列化问题?

时间:2010-11-13 10:19:16

标签: c# .net xml serialization xml-serialization

我的对象有父子关系。每个子对象都有一个指向其容器的 Parent 属性。在应用程序中创建此对象时,它已设置,因此没有问题。此Parent属性标记为XmlIgnore属性,因为它需要设置为其运行时父实例。那么,在反序列化对象后初始化此Parent属性的最佳方法是什么?是否有'反序列化完成'事件或类似事件?

编辑:我在谈论C#WPF中的XmlSerializer。我不想要二进制序列化器。

2 个答案:

答案 0 :(得分:1)

XmlSerializer不提供序列化回调,我担心。一种方法是让在添加时处理这个问题 - 但是你需要一个自定义集合(可能是从Collection<T>继承而来)Add / {{1调用子上的一些方法来添加(或删除,如果从集合中删除)父项。

或者 - 考虑简单地将其设为单向树 - 即孩子不拥有父母属性。

另一种选择是在反序列化后通过代码遍历模型,并修复任何父值。

最后一个选项是实施Remove,但非常很难正确。

答案 1 :(得分:1)

您的问题在某些方面缺乏细节,但是根据您描述的某些属性和属性,我将假设您在.NET Framework中使用XMLSerializer

您可能知道OnDeserialized attribute,您可以使用它来标记在反序列化对象后要调用的特定方法。不幸的是,这只适用于XMLSerializer的二进制,SOAP和DataAttribute格式化程序,不是

为了使用XMLSerializer实现相同的功能,您必须自己在要序列化为XML的类上实现IXmlSerializable interface。这将允许您完全控制如何序列化和反序列化类的实例,包括在反序列化对象后运行以初始化Parent属性的代码。

CodeProject上有一篇很好的示例文章介绍了如何正确实现IXmlSerializable可用here