这很难解释,所以我提供了一个问题的例子。我有一个包含子类列表的父类。当我序列化父级时,我得到了我的子类,但它们位于具有公共属性名称的元素下。额外的水平不是我需要的。我尝试将XmlIgnore属性添加到属性名称,但是它会抑制属性名称及其包含的发票集合。
家长班:
[XmlRoot("header")]
public class Lynx : INotifyPropertyChanged
{
#region /*-- Class Fields --*/
private List<InvoiceItem> _invoice = new List<InvoiceItem>();
#endregion
[XmlArray("invoice")]
[XmlArrayItem("invoice", typeof(InvoiceItem))]
public List<InvoiceItem> invoice
{
get
{
return _invoice;
}
set
{
if (value != _invoice)
{
_invoice = value;
OnPropertyChanged("invoice");
}
}
}
儿童班:
[XmlType(TypeName = "invoice")]
public class InvoiceItem : INotifyPropertyChanged
{
... properties and methods of the class
}
这就是它正在构建的:
<header>
<headerid>790aa61a-ad1b-49b9-bfb9-01fe3ca55eca</headerid>
<invoice> <-- this line is not needed
<invoice>
<company>BRU111</company>
<format>myformat</format>
...
这是我需要建立的:
<header>
<headerid>790aa61a-ad1b-49b9-bfb9-01fe3ca55eca</headerid>
<invoice>
<company>BRU111</company>
<format>myformat</format>
...
答案 0 :(得分:-1)
创建额外元素的原因是因为您的属性是项目列表
如果您想要一个奇异值,请使用
公共InvoiceItem发票
{
而不是
public List&lt; InvoiceItem&gt;发票
{
集合始终放置一个容器,以便每个项目都放在容器节点下。