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

'extraTypes'配列パラメーターにtypeof(Y)を設定する必要があります。

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; }
}

クラス定義を使用して、のシリアル化を試みると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という名前の要素を探すようにシリアライザーに指示します。

于 2012-10-24T10:57:56.483 に答える