[英]XmlRoot attribute serialization to a file
我有以下代码将对象序列化为文件:
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。
您可以从SubTemplate
类中删除[XmlRoot(...)]
属性。
有几种可能的解决方案:
使用[XmlArray]
和[XmlArrayItem]
属性:
将这些属性添加到TemplateClass
的Accounts
成员中:
public class TemplateClass { [XmlArray("Accounts")] [XmlArrayItem("Account")] public List<SubTemplate> Accounts; }
使用[XmlType]
属性:
您可以在SubTemplate
类的原始使用的[XmlRoot]
上使用此属性。
[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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.