巨大でエラーのあるxmlファイルのデシリアライズ

しばらく前、あるプロジェクトで、xmlファイルによってアップロードされたデータをインポートするタスクがありました。 荷降ろしがどこから来たかは私には知られておらず、問題ではありません。 主なことは、すべてが特定のフォルダーに移動したことです。 各xmlファイルには、1種類の情報が含まれていました(同じ種類の1つ以上のオブジェクトに関する情報がアップロードされました)。 プロジェクトはC#で記述されているため、解析はその手段で実行されました。



正直なところ、私はxmlファイルを扱ったことがなかったので、そのような可能性はありませんでした。そして、ここではそのような幸福です... 最初は、XmlDocumentクラスを使用してデータをサンプリングし、XmlTextReaderクラスを使用してファイルの内容をすばやく決定しました。 オブジェクトの多様性が大幅に増加し、すべての人の解析が消極的になるまで、すべてがうまくいきました。 ここで、シリアル化は単なる言葉ではなく、綿密な研究の対象となっています。 幸いなことに、すべてのxmlファイルについて、xsd形式で保存されたデータの構造の説明が添付されています。 Visual Studioのxsdユーティリティを使用して、このビジネスをC#のソースにすばやく変換しました。これは数百キロバイトかかりました。 それでは、多くのサイトのすべての例のように:



using( FileStream stream = new FileStream(NameFile) )

{

    XmlSerializer xs = new XmlSerializer(typeof(ImportObject));

    ImportObject obj = (ImportObject)xs.Deserialize(stream);

}




* This source code was highlighted with Source Code Highlighter.








, obj .



xml (null) . xml ( <Value/>). null , - . xsd, , , , . , , . . . , xml … ! .

xml , . . <Value/> 0. FileStream. Deserialize(). – Read():



class MyStream : FileStream

{

  public MyStream(string NameFile)

  {

  }



  public override int Read(byte[] array, int offset, int count)

  {

    …

  }

}




* This source code was highlighted with Source Code Highlighter.








, – . Read , : , DateTime.MinValue, array. Deserialize(). null , xml , , . , MyStream Read() , . . Deserialize(), , . , . .



, - . .

xml , ( , ). ProgressBar, , . .





StreamReader, . . Read() 1024 , , , . StreamReader , , . , , , . , Read() 0. Deserialize(), .



P.s. (poleznij sovet) , ( ) , ( ).



All Articles