1

我有以下代码将对象序列化到文件中:

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。

4

1 回答 1

1

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

有几种可能的解决方案:

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

    将这些属性添加到 的Accounts成员TemplateClass

    public class TemplateClass
    {
        [XmlArray("Accounts")]
        [XmlArrayItem("Account")]
        public List<SubTemplate> Accounts;
    }
    
  2. 使用[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>
于 2015-05-21T01:23:21.163 回答