Сериализация атрибута XmlRoot в файл
У меня есть следующий код, сериализующий объект в файл:
TemplateClass item = new TemplateClass();
// Fill in item
XmlSerializer writer = new XmlSerializer(typeof(TemplateClass));
using (StreamWriter file = new StreamWriter(filePath))
{
writer.Serialize(file, item);
}
где TemplateClass определяется следующим образом:
public class TemplateClass
{
public List<SubTemplate> Accounts;
}
[XmlRoot(ElementName = "Account")]
public class SubTemplate
{
public string Name;
public string Region;
}
Я ожидал, что атрибут XmlRoot напишет Account вместо SubTemplate в файле. Но вывод файла в настоящее время выглядит так:
<TemplateClass>
<Accounts>
<SubTemplate>
<Name>SampleName</Name>
<Region>SampleRegion</Region>
</SubTemplate>
</Accounts>
</TemplateClass>
Как я могу изменить свой код так, чтобы результат выглядел так:
<TemplateClass>
<Accounts>
<Account>
<Name>SampleName</Name>
<Region>SampleRegion</Region>
</Account>
</Accounts>
</TemplateClass>
Я не хочу менять имя класса SubTemplate на Account.
1 ответ
Решение
Вы можете удалить [XmlRoot(...)]
атрибут из SubTemplate
учебный класс.
Есть несколько возможных решений:
С помощью
[XmlArray]
а также[XmlArrayItem]
атрибуты:Добавьте эти атрибуты в
Accounts
членTemplateClass
:public class TemplateClass { [XmlArray("Accounts")] [XmlArrayItem("Account")] public List<SubTemplate> Accounts; }
С использованием
[XmlType]
атрибут:Вы можете использовать этот атрибут вместо первоначально использованного
[XmlRoot]
наSubTemplate
учебный класс.[XmlType("Account")] public class SubTemplate { public string Name; public string Region; }
Оба они будут производить следующий вывод:
<?xml version="1.0" encoding="utf-8"?>
<TemplateClass xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Accounts>
<Account>
<Name>First name</Name>
<Region>First region</Region>
</Account>
<Account>
<Name>Second name</Name>
<Region>Second region</Region>
</Account>
</Accounts>
</TemplateClass>