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