2012-05-24 83 views
6

我有一些xml文件,我試圖反序列化如下給定的代碼。在XML文檔中的錯誤(2,2)

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

以下文件中找到文件路徑時不包含以下行

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

而這就是爲什麼我得到的錯誤。在反序列化給定文件的流之前,可以幫助我如何添加此行運行時。

System.InvalidOperationException:下面

錯誤給出有XML文檔 錯誤(2,2)。 ---> System.InvalidOperationException: 不是預期的。在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.Read161_message() ---內部異常堆棧跟蹤結束---在System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader,String encodingStyle,XmlDeserializationEvents事件)在 System.Xml.Serialization.XmlSerializer.Deserialize(TextReader的 的TextReader)在CCR2BB.frmMain.BWConvertProcess_DoWork()

+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(TextReader textReader) at CCR2BB.frmMain.BWConvertProcess_DoWork() –

回答

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創建了此類。

然後你的項目將有兩個文件包含這個類。

  • 一個文件是designer.cs包含此類是從DataSet
  • 一個文件導出只是一個.cs文件,其中有一個部分類。
  • 在反序列化時使用此類時,它將引用來自DataSet派生自designer.cs的類。
  • 但是,如果您從項目中移除designer.cs,則代碼將引用.cs文件中的部分類。

通過刪除這個designer.cs文件,該文件的派生類從DataSet,我能夠解決此錯誤。