序列化没有父标记的对象列表

时间:2017-08-18 13:45:24

标签: c# .net xml

我有一个包含5个项目的列表myListOfItems。我想要做的就是创建一个xml,其中所有项目都显示如下:

<something>
  <someValue/>
</something>

<item>...</item>
<item>...</item>
<item>...</item>
<item>...</item>
<item>...</item>

<somethingElse>
  <someValue/>
</somethingElse>
到目前为止,我有这个:

<something>
    <someValue/>
</something>

<myListOfItems>
  <item>...</item>
  <item>...</item>
  <item>...</item>
  <item>...</item>
  <item>...</item>
</myListOfItems>

<somethingElse>
  <someValue />
</somethingElse>

这就是我的方式:

[System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=34)]
[System.Xml.Serialization.XmlArrayItemAttribute("passengerDetails", IsNullable=false)]
public List<Item> myListOfItems {
    get {
        return this.myListOfItemsField;
    }
    set {
        this.myListOfItemsField = value;
        this.RaisePropertyChanged("myListOfItems");
    }
}

如何删除父myListOfItems标记?

编辑: 至于你提到的话题: 如果我将XmlArrayItemAttribute更改为XmlElement,我得到这个

  

InvalidOperationException:XmlElement,XmlText和XmlAnyElement不能与XmlAttribute,XmlAnyAttribute,XmlArray或XmlArrayItem一起使用。

当我注释掉XmlArrayAttribute部分时,我得到了这个

  

InvalidOperationException:不一致的排序:如果在类的一个成员上使用,所有类似粒子的成员都需要'Order'属性,请在类成员项上使用XmlElement,XmlAnyElement或XmlArray自定义属性显式设置'Order' ”。

现在我如何设置多个项目的订单?

1 个答案:

答案 0 :(得分:0)

您不需要使用序列化。而是使用xml linq:

using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using System.Net;


namespace ConsoleApplication73
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {

            XDocument doc = XDocument.Load(FILENAME);

            List<string> items = doc.Descendants("item").Select(x => (string)x).ToList();

        }

    }

}