使用XmlSerializer更改数组元素名称而不展平

时间:2013-07-23 21:22:51

标签: c# .net xml-serialization

我有以下代码:

[Serializable]
[XmlRoot("Database")]
public class SqlDatabase
{
    public List<SqlTable> Tables { get; private set; }
}

如果我使用XmlSerializer而没有任何自定义属性,则生成的XML会保留列表层次结构:

<Database>
  <Tables>
    <SqlTable Name="Table1" />
    <SqlTable Name="Table2" />
  </Tables>
</Database>

但是,我想将元素名称“SqlTable”更改为“Table”。我尝试在列表中使用XmlElement属性

[Serializable]
[XmlRoot("Database")]
public class SqlDatabase
{
    [XmlElement("Table")]
    public List<SqlTable> Tables { get; private set; }
}

名称已更改,但层次结构已展平:

<Database>
  <Table Name="Table1" />
  <Table Name="Table2" />
</Database>

然后我尝试了XmlArray属性,它改变了列表的名称,但没有改变其中的元素:

[Serializable]
[XmlRoot("Database")]
public class SqlDatabase
{
    [XmlArray("Foo")]
    public List<SqlTable> Tables { get; private set; }
}

结果

<Database>
  <Foo>
    <SqlTable Name="Table1" />
    <SqlTable Name="Table2" />
  </Foo>
</Database>

我试图将这两者结合起来,并且有一个例外,说它们不能一起使用。

所以问题是,是否有一种简单的方法来更改元素名称而不会使层次结构变平?

0 个答案:

没有答案