XmlRoot 属性序列化到一个文件

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>

虽然我不想将子模板 class 的名称更改为帐户。

您可以从 SubTemplate class 中删除 [XmlRoot(...)] 属性。

有几种可能的解决方案:

  1. 使用 [XmlArray][XmlArrayItem] 属性:

    将这些属性添加到 TemplateClassAccounts 成员:

    public class TemplateClass
    {
        [XmlArray("Accounts")]
        [XmlArrayItem("Account")]
        public List<SubTemplate> Accounts;
    }
    
  2. 使用 [XmlType] 属性:

    您可以在 SubTemplate class 上使用此属性代替原来使用的 [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>