繁体   English   中英

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>

我不想将SubTemplate类的名称更改为Account。

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

有几种可能的解决方案:

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

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

     public class TemplateClass { [XmlArray("Accounts")] [XmlArrayItem("Account")] public List<SubTemplate> Accounts; } 
  2. 使用[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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM