0

これが私のコードです:

    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;
        }

    }

これは私の内部例外のスタックトレースです:

System.Xml.XmlTextReaderImpl.Throw(Exception e) System.Xml.XmlTextReaderImpl.Throw(String res, String arg) System.Xml.XmlTextReaderImpl.ThrowUnclosedElements() System.Xml.XmlTextReaderImpl.ParseAttributes() System. Xml.XmlTextReaderImpl.ParseElement() ja System.Xml.XmlTextReaderImpl.ParseDocumentContent() ja System.Xml.XmlTextReaderImpl.Read() ja System.Xml.XmlTextReader.Read() ja System.Runtime.Serialization.Formatters.Soap.SoapParser. ParseXml()
System.Runtime.Serialization.Formatters.Soap.SoapParser.Run() System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler handler, ISerParser serParser) 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ínea 99 en Solution1.MainWindow.Do() en c:\users\u201114160\documents\visual studio 2010\Projects\Solution1\Solution1\MainWindow.xaml.cs :リネア 45
ja Solution1.MainWindow..ctor() ja c:\users\u201114160\documents\visual studio 2010\Projects\Solution1\Solution1\MainWindow.xaml.cs:línea 36

それは私を夢中にさせます、いくつかのアイデアはありますか?この例外は、"ReturnListOfPersistentFile" ジェネリック メソッドが原因でスローされましたが、なぜですか?

前もって感謝します。

回答: SOAP フォーマッターでジェネリック リストをシリアル化しようとしましたが、SOAP フォーマッターはジェネリック リストをサポートしていません。

forums.microsoft.comでこのスレッドに遭遇しました。マイクロソフトの従業員が言ったことを引用させてください。

私たちは、Whidbey の SoapFormatter の重要な新機能作業に投資しないことを決定しました

みんな、ありがとう。

4

1 に答える 1

0

スタックトレースを見ると、ThrowUnclosedElementsメソッドに気づきました。これにより、ファイルが破損しているか、形式が正しくないように思われます。

ご指摘のとおり、SOAPシリアル化は汎用リストをサポートしていません。私が理解しているように、これは、リストをシリアル化しようとした結果、逆シリアル化できないファイルを取得したことを意味します。これは、ここで以前に議論されており、他の場所の中でもここ(あなた自身の引用)でも議論されています。

解決策は、一般的ではない、昔ながらの、忘れられたArrayListを使用することです。もちろん、アイテムにアクセスして適切なタイプにキャストする必要があります。これは、ラッパークラスを使用して実行できます。

別の方法は、リストをシリアル化する代わりに、オブジェクトごとにオブジェクトをシリアル化することです。

于 2012-06-01T03:30:39.510 に答える