我有以下代码:
[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>
我试图将这两者结合起来,但有一个例外说它们不能一起使用。
那么问题来了,有没有一种简单的方法可以改变元素名称而不会使层次结构变平?