XML序列化的不需要的属性名称

时间:2011-12-07 20:56:55

标签: c# xml serialization xml-serialization

  

可能重复:
  Removing Wrapper Elements from XML-Serialized Array

这很难解释,所以我提供了一个问题的例子。我有一个包含子类列表的父类。当我序列化父级时,我得到了我的子类,但它们位于具有公共属性名称的元素下。额外的水平不是我需要的。我尝试将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>
        ...

1 个答案:

答案 0 :(得分:-1)

创建额外元素的原因是因为您的属性是项目列表

如果您想要一个奇异值,请使用

公共InvoiceItem发票
{

而不是

public List&lt; InvoiceItem&gt;发票
{

集合始终放置一个容器,以便每个项目都放在容器节点下。