1

我有以下 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);
4

2 回答 2

1

您需要使用 typeof(Y) 填充“extraTypes”数组参数。

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

于 2012-10-24T10:34:39.770 回答
1

尝试这个:

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

使用您的类定义,如果您尝试序列化 a 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>)). 它期待<Y>而不是X<ArrayOfY>List<Y>成员。

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

于 2012-10-24T10:57:56.483 回答