在没有包含一个列表的容器的情况下反序列化为List

时间:2014-10-24 22:13:32

标签: c# .net xml-serialization

我需要使用XmlSerializer反序列化这样的结构。

  <root>   
    <parameter1>
    5
    </parameter1>
    <itemList>
      <parameter2>5</parameter2>
      <item>v</item>
      <item>v2</item>
    </itemList>
    <itemList>
      <parameter2>50</parameter2>
      <item>v3</item>
      <item>v4</item>
    </itemList>
  </root>

使用此代码:

[XmlRoot("root")]
public class Root
{
    [XmlElement("parameter1")]
    public List<ItemList> Parameter1{ get; set; }

    [XmlElement("itemList")]
    public List<ItemList> ItemLists{ get; set; }
}

public class ItemList
{
    [XmlElement("parameter2")]
    public List<ItemList> Parameter2{ get; set; }

    [XmlElement("item")]
    public List<Item> Items{ get; set; }
}

但它只希望每个级别上有1个元素。 如果我使用这样的对象:

[XmlRoot("root")]
public class Root
{
    [XmlElement("parameter1")]
    public List<ItemList> Parameter1{ get; set; }

    [XmlElement("itemList")]
    public List<ItemList> ItemLists{ get; set; }
}

public class ItemList
{
    [XmlElement("parameter2")]
    public List<ItemList> Parameter2{ get; set; }

    public List<Item> Items{ get; set; }
}

它反序列化所有ItemList对象,但Item列表为空。 有什么问题?

1 个答案:

答案 0 :(得分:0)

查看此文档http://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

我不认为序列化程序可以理解这种结构:

<root>   
  <parameter1>
  5
  </parameter1>
  <itemList>
    <parameter2>5</parameter2>
    <item>v</item>
    <item>v2</item>
  </itemList>
  <itemList>
  <parameter2>50</parameter2>
    <item>v3</item>
    <item>v4</item>
  </itemList>
</root>

你应该尝试的是这样的:

<root>   
  <parameter1>
  5
  </parameter1>
  <itemLists>
    <itemList>
      <parameter2>5</parameter2>
      <items>
        <item>
          <parameter3>v</parameter3>
        </item>
        <item>
          <parameter3>v2</parameter3>
        </item>
      </items>
    </itemList>
    <itemList>
      <parameter2>50</parameter2>
      <items>
        <item>
          <parameter3>v3</parameter3>
        </item>
        <item>
          <parameter3>v4</parameter3>
        </item>
      </items>
    </itemList>
  </itemLists>
</root>

这将由以下类表示:

[XmlRoot("root")]
public class Root
{
    [XmlElement("parameter1")]
    public int Parameter1{ get; set; }

    [XmlElement("itemLists")]
    public List<ItemList> ItemLists{ get; set; }
}

public class ItemList
{
    [XmlElement("parameter2")]
    public List<ItemList> Parameter2{ get; set; }

    [XmlElement("items")]
    public List<Item> Items{ get; set; }
}

public class Item
{
    [XmlElement("parameter3")]
    public string Parameter3{ get; set; }
}