1

我有以下代码:

[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>

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

那么问题来了,有没有一种简单的方法可以改变元素名称而不会使层次结构变平?

4

0 回答 0