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(...)]
属性。
有几种可能的解决方案:
使用 [XmlArray]
和 [XmlArrayItem]
属性:
将这些属性添加到 TemplateClass
的 Accounts
成员:
public class TemplateClass
{
[XmlArray("Accounts")]
[XmlArrayItem("Account")]
public List<SubTemplate> Accounts;
}
使用 [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>
我有以下代码将一个对象序列化到一个文件中:
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(...)]
属性。
有几种可能的解决方案:
使用
[XmlArray]
和[XmlArrayItem]
属性:将这些属性添加到
TemplateClass
的Accounts
成员:public class TemplateClass { [XmlArray("Accounts")] [XmlArrayItem("Account")] public List<SubTemplate> Accounts; }
使用
[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>