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

StackOverflow https://stackoverflow.com/questions/600597

Вопрос

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

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

public class Section
{
    public Report Report;
}

Я что-то упускаю?

Это было полезно?

Решение

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

Другие советы

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

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

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;
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top