我有以下代码将对象序列化到文件中:
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。
答案 0 :(得分:1)
您可以从[XmlRoot(...)]
类中删除SubTemplate
属性。
有几种可能的解决方案:
使用[XmlArray]
和[XmlArrayItem]
属性:
将这些属性添加到Accounts
的{{1}}成员:
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;
}