Как я могу получить ссылку на родительский объект при десериализации XML в C #? - PullRequest
1 голос
/ 02 марта 2009

Я не могу заставить это работать, вот мой (урезанный) код: -

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

public class Section
{
    public Report Report;
}

Я что-то упустил?

Ответы [ 3 ]

6 голосов
/ 02 марта 2009

Ваши объекты содержат циклические ссылки, которые не поддерживаются классом XmlSerializer . Вместо этого вы можете взглянуть на DataContractSerializer , который поддерживает такие сценарии.

0 голосов
/ 02 марта 2009

Вот мое решение. Это может быть не так элегантно, как вы ожидаете:

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;
  }
}
0 голосов
/ 02 марта 2009

Вы должны убедиться, что знаете, как эти классы сериализуются и десериализуются. Напишите XML, который вы хотите получить, и выясните, как вы хотите, чтобы объекты стали XML, и наоборот. Это не просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...