Come posso ottenere un riferimento all'oggetto genitore durante la deserializzazione di XML in C #?

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

Domanda

Non riesco a farlo funzionare, ecco il mio codice (ridotto): -

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

public class Section
{
    public Report Report;
}

Mi manca qualcosa?

È stato utile?

Soluzione

I tuoi oggetti contengono riferimenti circolari che non sono supportati da XmlSerializer classe. È possibile invece consultare il DataContractSerializer che supporta tali scenari.

Altri suggerimenti

Dovresti assicurarti di sapere come vuoi che queste classi serializzino e deserializzino. Scrivi l'XML che desideri come risultato e scopri come vuoi che gli oggetti diventino XML e viceversa. Non è un gioco da ragazzi.

Ecco la mia soluzione. Potrebbe non essere così elegante come ti aspetteresti:

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;
  }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top