Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在XmlSerializer生成的对象中维护xml层次结构(即父-子)信息_C#_.net_Xml_Serialization_Hierarchy - Fatal编程技术网

C# 在XmlSerializer生成的对象中维护xml层次结构(即父-子)信息

C# 在XmlSerializer生成的对象中维护xml层次结构(即父-子)信息,c#,.net,xml,serialization,hierarchy,C#,.net,Xml,Serialization,Hierarchy,一段时间以来,我一直在试图解决以下问题,但我的想法开始枯竭: 我已经使用xsd.exe工具从xsd模式生成了一组C#类,反序列化xml文件效果很好。问题在于,除了使用自动生成的类的方便性和安全性之外,我还需要有关xml层次结构的信息,即我需要在反序列化期间创建的对象之间建立父子关系。请注意,我希望避免保留单独的xml层次结构(如DOM树),而是让生成的对象跟踪其父对象和子对象 我使用JAXB成功地在java中实现了这一点,方法是: 为所有反序列化对象定义公共基类。该基类包含子对象列表和对父对象(

一段时间以来,我一直在试图解决以下问题,但我的想法开始枯竭:

我已经使用xsd.exe工具从xsd模式生成了一组C#类,反序列化xml文件效果很好。问题在于,除了使用自动生成的类的方便性和安全性之外,我还需要有关xml层次结构的信息,即我需要在反序列化期间创建的对象之间建立父子关系。请注意,我希望避免保留单独的xml层次结构(如DOM树),而是让生成的对象跟踪其父对象和子对象

我使用JAXB成功地在java中实现了这一点,方法是:

  • 为所有反序列化对象定义公共基类。该基类包含子对象列表和对父对象(如果有)的引用

  • 使用Unmarshaller.Listener功能,该功能在完成对象反序列化时提供回调。此回调提供对最近反序列化对象的父对象的引用,这使得建立父子关系变得微不足道


  • 我该如何用C#来做这件事?我查看了MSDN文档,在谷歌上搜索了很多,但没有找到任何有用的信息。

    应该维护简单的对象层次结构,以便进行序列化和反序列化。复杂的东西,如数组或列表包含多种类型的对象是有点欺骗。但这是可能的。

    我不久前写了一篇关于这个确切问题的文章,也许它可以帮助你