Come posso ottenere un riferimento all'oggetto genitore durante la deserializzazione di XML in C #?
-
03-07-2019 - |
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?
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