2012-06-01 48 views
0

這裏是我的代碼:一個神祕的例外在這裏:XamlParseException

public partial class MainWindow : Window 
{ 
    List<Cliente> CContent; 
    string mainPath = @"D:\70-536\Clientes.dat"; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     Do(); 
    } 

    private void Do() 
    { 

     FileInfo fi = new FileInfo(mainPath); 
     if (fi.Exists) 
     { 
      CContent = ReturnListOfPersistentFile<Cliente>(mainPath); 
     } 
     else 
     { 
      CContent = new List<Cliente>(); 
     } 
    } 

    public List<T> ReturnListOfPersistentFile<T> (string Filename) 
    { 
     SoapFormatter sf = new SoapFormatter(); 

     using (Stream fStream = new FileStream(Filename,FileMode.Open, FileAccess.Read,FileShare.None)) 
     { 
      List<T> list = new List<T>(); 
      list = (List<T>)sf.Deserialize(fStream); 

      return list; 
     } 

    } 

這是我的InnerException的堆棧跟蹤:

連接System.Xml.XmlTextReaderImpl.Throw(例外五)EN 系統.Xml.XmlTextReaderImpl.Throw(字符串RES,字符串ARG)烯 System.Xml.XmlTextReaderImpl.ThrowUnclosedElements()烯 System.Xml.XmlTextReaderImpl.ParseAttributes()烯 System.Xml.XmlTextReaderImpl.ParseElement()烯 System.Xml.XmlTextReaderImpl.ParseDocumentContent()烯 System.Xml.XmlTextReaderImpl.Read()烯 System.Xml.XmlTextReader.Read()烯 System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXml()
恩System.Runtime.Serialization.Formatters.Soap.SoapParser.Run()EN System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler 處理器,ISerParser serParser)EN System.Runtime.Serialization.Formatters。 Soap.SoapFormatter.Deserialize(Stream serializationStream,HeaderHandler handler)en System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(Stream serializationStream)en Solution1.MainWindow.ReturnListOfPersistentFile [T](String Filename)en c:\ users \ u201114160 \ documents \ visual studio 2010 \ Projects \ Solution1 \ Solution1 \ MainWindow.xaml.cs:línea99 en Solution1.MainWindow.Do ()en c:\ users \ u201114160 \ documents \ visual studio 2010 \ Projects \ Solution1 \ Solution1 \ MainWindow.xaml.cs:línea45
zh Solution1.MainWindow..ctor()en c:\ users \ u201114160 \文檔\ Visual Studio的 2010 \項目\解決方法1 \解決方法1 \ MainWindow.xaml.cs:拉利內阿36

這讓我發瘋,一些想法?這個異常是因爲「ReturnListOfPersistentFile」泛型方法而拋出的,但是爲什麼?

在此先感謝。

回答: 我試圖用SOAP格式化程序序列化一個通用列表,但是SOAP格式化程序不支持通用列表。

我就遇到了這個線程forums.microsoft.com.讓我引用了微軟員工說:

我們已經決定不以任何顯著的新功能的工作投入了SoapFormatter在Whidbey的

謝謝大家。

+1

...因爲你有一個損壞的文件? – Theraot

+0

因爲SOAP序列化不支持泛型列表,所以並不是很乾淨。:( –

+0

對不起,我環顧四周,並且沒有發現類似於我的任何問題,無論如何我必須解釋我是如何修復它的,謝謝 –

回答

0

看着你的堆棧跟蹤,我注意到方法ThrowUnclosedElements。這使我認爲你得到了損壞或格式不正確的文件。

正如您已經指出的那樣,SOAP序列化不支持通用列表。據我瞭解,這意味着你試圖序列化一個列表,並作爲結果你有一個無法反序列化的文件。這已經在here之前討論過了,還有here(你自己的引用)在其他地方討論過。

解決方案可能是使用非泛型的舊時尚,忘記ArrayList。當然,你必須訪問這些項目並將它們轉換爲適當的類型,這可以通過一個包裝類來完成。

另一種方法是每個對象序列化對象,而不是序列化列表。

+0

我搜索了泛型列表和SOAP序列化,並且發現了這個站點,我很欣賞那個響應的細節。 –