Como posso obter uma referência para o objeto pai quando desserialização XML em C #?
-
03-07-2019 - |
Pergunta
Eu não consigo começar este trabalho, aqui está o meu código (simplificada): -
[XmlRoot("report")]
public class Report
{
[XmlArray("sections"), XmlArrayItem("section")]
public List<Section> Sections;
}
public class Section
{
public Report Report;
}
Estou faltando alguma coisa?
Solução
Seus objetos contêm referências circulares que não é suportado pelo classe XmlSerializer . Você poderia, em vez olhar para a DataContractSerializer que suporta tais cenários.
Outras dicas
Você deve se certificar de que você sabe como você deseja que essas classes para serializar e desserializar. Escreva o XML que você quer como resultado, e descobrir como você deseja objetos para se tornar XML e vice-versa. Não é uma escolha óbvia não.
Aqui está a minha solução. Pode não ser tão elegante como você esperaria:
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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow