¿Cómo puedo obtener una referencia al objeto principal al deserializar XML en C #?
-
03-07-2019 - |
Pregunta
Parece que no consigo que funcione, aquí está mi código (reducido): -
[XmlRoot("report")]
public class Report
{
[XmlArray("sections"), XmlArrayItem("section")]
public List<Section> Sections;
}
public class Section
{
public Report Report;
}
¿Me estoy perdiendo algo?
Solución
Sus objetos contienen referencias circulares que no es compatible con Clase XmlSerializer . En su lugar, puede consultar DataContractSerializer , que admite tales escenarios.
Otros consejos
Debería asegurarse de saber cómo quiere que esas clases se serialicen y deserialicen. Escriba el XML que desee como resultado y descubra cómo desea que los objetos se conviertan en XML y viceversa. No es una obviedad.
Aquí está mi solución. Puede que no sea tan elegante como cabría esperar:
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;
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow