2012-05-24 15 views
6

私はいくつかのXMLファイルを持っており、私は与えられたコードで以下のように逆直列化しようとしています。ここでは、ファイルXML文書のエラー(2,2)

using (StreamReader srFileContent = new StreamReader(filePath)) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(messageType)); 
    messageType objMessage = (messageType)serializer.Deserialize(srFileContent); 
} 

は、私はエラーを取得していますなぜfilePathには、次の行

<?xml version="1.0"?> 
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

とのthatsが含まれていませんで探します。指定されたファイルのストリームを逆シリアル化する前に、このランタイムを追加する方法を教えてください。

エラーは以下のとおりである:

のSystem.InvalidOperationException:エラーがXMLドキュメント (2、2)です。 ---> System.InvalidOperationException: は期待されていませんでした。 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.Read161_message() ---内部例外スタックトレースの終了--- System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader、String encodingStyle、XmlDeserializationEvents events) )CCR2BB.frmMain.BWConvertProcess_DoWorkで System.Xml.Serialization.XmlSerializer.Deserialize(たTextReader たTextReader)()

+0

有効なXMLファイルではないということですか?どのように*始まりますか? –

+0

**これらの行は含まれていませんか?また、残りのXMLファイルはどこにありますか?また、エラーは何ですか? – Ashe

+0

エラーは次のとおりです。 System.InvalidOperationException:XMLドキュメント(2、2)にエラーがあります。 ---> System.InvalidOperationException:は期待されていませんでした。 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.Read161_message() ---内部例外スタックトレースの終わり--- System.Xml.Serialization.XmlSerializer.Deserializeで (XmlReaderのXmlReaderを、文字列いるencodingStyle、XmlDeserializationEventsイベント) で System.Xml.Serialization.XmlSerializer.Deserialize CCR2BB.frmMain.BWConvertProcess_DoWorkで(たTextReaderたTextReader) () –

答えて

12

問題を調べるには、基本例外を調べる必要があります。キャッチされた例外には、おそらく4つ以上の内部例外が含まれています。

EG:

try 
{ 
    ... 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.GetBaseException()); 
} 
3

で別の質問では解決されました:

XmlRootAttribute xRoot = new XmlRootAttribute(); 
xRoot.ElementName = "message"; 
// xRoot.Namespace = "http://www.cpandl.com"; 
xRoot.IsNullable = true; 

XmlSerializer xs = new XmlSerializer(typeof(messageType),xRoot); 

月それはあなたの問題に対するアプローチです。私のネットワークではMSDNがダウンしているので、XmlRootAttributeのドキュメントをもう提供することはできません。

+1

元の回答にupvoteを与えたいと思います。この回答に参考にしていただければ幸いです。 – btlog

0

あなたはクラスのにmessageType」を手に入れたのどこから?

xsd.exeを使用してxml用にxsdを作成し、次にxsdを使用した場合は、このクラスを作成しました。

あなたのプロジェクトには、このクラスを含む2つのファイルがあります。ファイルの

  • 一つは、部分クラスを有する.csファイルは、単にDataSet クラス
  • つのファイルから導出され、このクラスを含むdesigner.csあります。
  • デシリアライズ時にこのクラスを使用すると、DataSetから派生したdesigner.csのクラスを参照します。
  • ただし、designer.csをプロジェクトから削除すると、コードは.csファイルのpartialクラスを参照します。

DataSetから派生したクラスを持つこのdesigner.csファイルを削除することで、このエラーを解決できました。