У меня есть коллекция классов, которые я хочу сериализовать в файл XML. Это выглядит примерно так:
public class Foo
{
public List<Bar> BarList { get; set; }
}
Где бар - это просто оболочка для набора свойств, например:
public class Bar
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
Я хочу пометить это так, чтобы оно выводилось в файл XML - это будет использоваться как для постоянства, так и для отображения настроек через XSLT в удобной для восприятия человеком форме.
Я хочу получить хорошее представление XML, например:
<?xml version="1.0" encoding="utf-8"?>
<Foo>
<BarList>
<Bar>
<Property1>Value</Property1>
<Property2>Value</Property2>
</Bar>
<Bar>
<Property1>Value</Property1>
<Property2>Value</Property2>
</Bar>
</Barlist>
</Foo>
где все Бары в Barlist записаны со всеми их свойствами. Я вполне уверен, что мне понадобится некоторая разметка для определения класса, чтобы это сработало, но я не могу найти правильную комбинацию.
Я пометил Foo с атрибутом
[XmlRoot("Foo")]
и list<Bar>
с атрибутом
[XmlArray("BarList"), XmlArrayItem(typeof(Bar), ElementName="Bar")]
в попытке сообщить Сериализатору, что я хочу, чтобы произошло. Это, похоже, не работает, и я просто получаю пустой тег, похожий на этот:
<?xml version="1.0" encoding="utf-8"?>
<Foo>
<Barlist />
</Foo>
Я не уверен, что тот факт, что я использую автоматические свойства, должен иметь какой-либо эффект, или использование обобщений требует какой-то особой обработки. Я получил это для работы с более простыми типами, такими как список строк, но список классов до сих пор ускользает от меня.