3

修正済みの有効な XML ドキュメントがあります。オブジェクト階層を取得するためにデシリアライズしようとしています。ただし、スローされる例外があります。

これは私の XML ドキュメントです。

<ROWSET>
   <ROW>
      <LOT>LOT1234</LOT>
      <DATE_TRANS>2012-05-20</DATE_TRANS>
      <NUMERO_AA227>AA227_001</NUMERO_AA227>
      <NUMERO_ETUI>ETUI_001</NUMERO_ETUI>   
      <IDENTITE_BOITE_1>Boite1_1</IDENTITE_BOITE_1>
      <IDENTITE_BOITE_2>Boite1_2</IDENTITE_BOITE_2>
      <IDENTITE_BOITE_3>Boite1_3</IDENTITE_BOITE_3>
      <IDENTITE_BOITE_4>Boite1_5</IDENTITE_BOITE_4>
      <IDENTITE_BOITE_5>Boite1_5</IDENTITE_BOITE_5>
   </ROW>
   <ROW>
      <LOT>LOT5678</LOT>
      <DATE_TRANS>2012-05-20</DATE_TRANS>
      <NUMERO_AA227>AA227_001</NUMERO_AA227>
      <NUMERO_ETUI>ETUI_001</NUMERO_ETUI>   
      <IDENTITE_BOITE_1>Boite1_1</IDENTITE_BOITE_1>
      <IDENTITE_BOITE_2>Boite1_2</IDENTITE_BOITE_2>
      <IDENTITE_BOITE_3>Boite1_3</IDENTITE_BOITE_3>
      <IDENTITE_BOITE_4>Boite1_5</IDENTITE_BOITE_4>
      <IDENTITE_BOITE_5>Boite1_5</IDENTITE_BOITE_5>
   </ROW>
</ROWSET>

これが私のオブジェクト モデルです。

[Serializable]
[System.Xml.Serialization.XmlRoot("DTOFournitureListeImporter")]
public class DTOFournitureListeImporter
{
   [XmlArray("ROWSET")]
   [XmlArrayItem("ROW", typeof(DTOFournitureImporter))]
   public DTOFournitureImporter[] dtoFournitureImporter { get; set; }
}

[Serializable]
public class DTOFournitureImporter
{
   [System.Xml.Serialization.XmlElement("lot")]
   public string lot { get; set; }

   [System.Xml.Serialization.XmlElement("date_trans")]
   public DateTime date_trans { get; set; }

   [System.Xml.Serialization.XmlElement("numero_aa227")]
   public string numero_aa227 { get; set; }

   [System.Xml.Serialization.XmlElement("numero_etui")]
   public string numero_etui { get; set; }

   [System.Xml.Serialization.XmlElement("identite_boite_1")]
   public string identite_boite_1 { get; set; }

   [System.Xml.Serialization.XmlElement("identite_boite_2")]
   public string identite_boite_2 { get; set; }

   [System.Xml.Serialization.XmlElement("identite_boite_3")]
   public string identite_boite_3 { get; set; }

   [System.Xml.Serialization.XmlElement("identite_boite_4")]
   public string identite_boite_4 { get; set; }

   [System.Xml.Serialization.XmlElement("identite_boite_5")]
   public string identite_boite_5 { get; set; }
}

デシリアライズする方法:

XmlSerializer serializer = new XmlSerializer(typeof(DTOFournitureListeImporter));
TextReader textReader = new StreamReader(model.cheminFichierXML);
DTOFournitureListeImporter dTOFournitureListeImporter = (DTOFournitureListeImporter)serializer.Deserialize(textReader);
textReader.Close();

そしてエラー:

XML 文書 (2、2) にエラーがあります。- System.InvalidOperationException: 予期されていませんでした。Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderDTOFournitureListeImporter.Read4_DTOFournitureListeImporter()

4

1 に答える 1

4

問題は、XMLファイル内のすべてのタグが大文字である可能性がありますが、クラスの属性は、それらが小文字でなければならないことを示唆しています。

また、属性でXMLルートがDTOFournitureListeImporterであると言っていますが、そうではありません。XMLルートはROWSETです。

つまり、全体として、作成しようとしている構造がXMLファイルと一致しません。

于 2012-05-23T16:12:02.267 に答える