【问题标题】:How can I get a reference to the parent object when deserializing XML in C#?在 C# 中反序列化 XML 时如何获取对父对象的引用?
【发布时间】:2009-03-01 21:42:24
【问题描述】:

我似乎无法正常工作,这是我的(精简版)代码:-

[XmlRoot("report")]
public class Report
{
    [XmlArray("sections"), XmlArrayItem("section")]
    public List<Section> Sections;
}

public class Section
{
    public Report Report;
}

我错过了什么吗?

【问题讨论】:

    标签: c# .net serialization parent-child


    【解决方案1】:

    您的对象包含XmlSerializer 类不支持的循环引用。你可以看看DataContractSerializer 哪个supports 这样的场景。

    【讨论】:

    • 这也是现在序列化的首选默认机制,因为旧机制没有令人信服的理由。
    • 如果我有超过 300 个字符可以玩,我会发布完成的代码,但我只想说,使用 DataContractSerializer 有效。谢谢。
    【解决方案2】:

    您应该确保知道您希望这些类如何序列化和反序列化。编写您想要的 XML 作为结果,并弄清楚您希望对象如何成为 XML,反之亦然。这不是一件容易的事。

    【讨论】:

      【解决方案3】:

      这是我的解决方案。它可能没有你想象的那么优雅:

      public class Report
      {
        //...
      
      
        void PostLoad()
        {
          foreach(Section s in Sections)
          {
            s.Report = this;
          }
        }
      
        public static Report Load(string filename)
        {
          // Load using an XmlSerializer
          Report report = ...;
      
          report.PostLoad();
      
          return report;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多