XmlRoot属性序列化为文件

时间:2015-05-21 00:50:37

标签: c# xml-parsing xml-serialization 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 个答案:

答案 0 :(得分:1)

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

有几种可能的解决方案:

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

    将这些属性添加到Accounts的{​​{1}}成员:

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

    您可以使用此属性代替[XmlType]类上最初使用的[XmlRoot]

    SubTemplate
  3. 这两个都会产生以下输出:

    [XmlType("Account")]
    public class SubTemplate
    {
        public string Name;
        public string Region;
    }