XmlSerializer - 数组中的数组

时间:2012-10-24 10:30:52

标签: c# .net xmlserializer

我有以下xml文件:

<ArrayOfX xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <X>
    <Name>Name1</Name>
    <ArrayOfY>
      <Y>
        <Member1>1</Member1>
      </Y>
      ...
    </ArrayOfY>
  </X>
  ...
</ArrayOfX>

public class X {
    public string Name { get; set; }
    public List<Y> Y { get; set; }
}

public class Y {
    public String Member1 { get; set; }
}

但是如果我尝试使用XmlSerializer反序列化,Name包含正确的值,但Y列表为空。有什么想法吗?

XmlSerializer serializer = new XmlSerializer( typeof( List<X> ) );
return (List<X>)serializer.Deserialize(reader);

2 个答案:

答案 0 :(得分:1)

您需要填充&#39; extraTypes&#39; typeof(Y)的数组参数。

请参阅http://msdn.microsoft.com/en-us/library/e5aakyae.aspx

答案 1 :(得分:1)

试试这个:

public class X {
    public string Name { get; set; }
    [XmlArray(ElementName = "ArrayOfY")]
    public List<Y> Y { get; set; }
}

使用类定义,如果您尝试序列化List<X>,输出将如下所示:

<ArrayOfX xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <X>
    <Name>Name1</Name>
    <Y> <!-- Not ArrayOfY -->
      <Y>
        <Member1>1</Member1>
      </Y>
      ...
    </Y>
  </X>
  ...
</ArrayOfX>

您提供的xml文件不是XmlSerializer(typeof(List<X>))的有效格式。对于X的<Y>成员,期望<ArrayOfY>而不是List<Y>

我添加的属性会指示序列化程序查找名为ArrayOfY的元素。