Как я могу получить ссылку на родительский объект при десериализации XML в C #?
-
03-07-2019 - |
Вопрос
Кажется, я не могу заставить это работать, вот мой (урезанный) код:-
[XmlRoot("report")]
public class Report
{
[XmlArray("sections"), XmlArrayItem("section")]
public List<Section> Sections;
}
public class Section
{
public Report Report;
}
Я что-то упускаю?
Решение
Ваши объекты содержат циклические ссылки, которые не поддерживаются XmlSerializer - сериализатор класс.Вы могли бы вместо этого посмотреть на DataContractSerializer ( Сервер обработки данных) который поддерживает такие сценарии.
Другие советы
Вы должны убедиться, что знаете, как вы хотите сериализовать и десериализовать эти классы.Напишите XML, который вы хотите получить в результате, и выясните, как вы хотите, чтобы объекты становились XML и наоборот.Это не так уж и просто.
Вот мое решение.Это может оказаться не так элегантно, как вы ожидали:
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;
}
}
Не связан с StackOverflow