Comment obtenir une référence à l'objet parent lors de la désérialisation de XML en C #?

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

Question

Je n'arrive pas à faire fonctionner cela, voici mon code (dépouillé): -

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

public class Section
{
    public Report Report;
}

Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Vos objets contiennent des références circulaires non prises en charge par XmlSerializer . Vous pouvez plutôt consulter le DataContractSerializer , qui prend en charge de tels scénarios.

Autres conseils

Vous devez savoir comment vous voulez que ces classes se sérialisent et se désérialisent. En conséquence, écrivez le code XML souhaité et déterminez comment vous souhaitez que les objets deviennent XML, et inversement. Ce n'est pas une évidence.

Voici ma solution. Ce n'est peut-être pas aussi élégant que vous le souhaiteriez:

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;
  }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top