C# 带有XML序列化的不需要的属性名
可能重复:C# 带有XML序列化的不需要的属性名,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,可能重复: 这很难解释,所以我举了一个问题的例子。我有一个包含子类列表的父类。当我序列化父类时,我得到的是我的子类,但它们位于具有公共属性名的元素下。额外的级别不是我需要的。我尝试将XmlIgnore属性添加到属性名,但这抑制了属性名及其包含的发票集合的所有内容 父类: [XmlRoot("header")] public class Lynx : INotifyPropertyChanged { #region /*-- Class Fields --*/ private
这很难解释,所以我举了一个问题的例子。我有一个包含子类列表的父类。当我序列化父类时,我得到的是我的子类,但它们位于具有公共属性名的元素下。额外的级别不是我需要的。我尝试将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>
...
790aa61a-ad1b-49b9-bfb9-01fe3ca55eca
创建额外元素的原因是因为您的属性是项目列表
如果需要单数值,请使用
公共发票项目发票
{
而不是
公开列表发票
{
集合始终放置一个容器,以便将每个项目放置在容器节点下。标题元素将包含1+个发票元素,因此我确实需要一个发票集合。(删除我的答案,因为@Tuzo发现了一个优秀的现有副本,但是:使用[XmlElement(“发票”)]
而不是当前属性)@Tuzo-很好,谢谢你,我无法很好地表达这个问题,无法找到另一个。
<header>
<headerid>790aa61a-ad1b-49b9-bfb9-01fe3ca55eca</headerid>
<invoice>
<company>BRU111</company>
<format>myformat</format>
...