这里有一个神秘的例外:XamlParseException

本文关键字:XamlParseException 有一个 这里 | 更新日期: 2023-09-27 18:35:52

这是我的代码:

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

这是我内心异常的堆栈跟踪:

en

System.Xml.XmlTextReaderImpl.Throw(Exception e) en System.Xml.XmlTextReaderImpl.Throw(String res, String arg) en System.Xml.XmlTextReaderImpl.ThrowUnclosedElements() en System.Xml.XmlTextReaderImpl.ParseAttributes() en System.Xml.XmlTextReaderImpl.ParseElement() en System.Xml.XmlTextReaderImpl.ParseDocumentContent() en System.Xml.XmlTextReaderImpl.Read() en System.Xml.XmlTextReader.Read() en System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXml()
en System.Runtime.Serialization.Formatters.Soap.SoapParser.Run() en System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler handler, 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 解决方案1.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:línea 45
en 解决方案1.MainWindow..ctor() en C:''users''u201114160''documents''Visual Studio 2010''Projects''Solution1''Solution1''MainWindow.xaml.cs:línea 36

这让我发疯,一些想法?抛出此异常是因为"ReturnListOfPersistentFile"泛型方法,但是为什么?

提前谢谢。

答:我试图使用 SOAP 格式化程序序列化泛型列表,但 SOAP 格式化程序不支持泛型列表。

我在 forums.microsoft.com 遇到了这个线程。让我引用微软员工的话:

我们决定不投资惠德比的SoapFormatter的任何重大新功能工作。

谢谢大家。

这里有一个神秘的例外:XamlParseException

查看您的堆栈跟踪,我注意到方法ThrowUnclosedElements。这让我认为您得到了一个损坏或格式不正确的文件。

正如您所指出的,SOAP 序列化不支持泛型列表。据我了解,这意味着您尝试序列化列表,结果您得到了一个无法反序列化的文件。这在之前已经讨论过了,也在这里(你自己的引用)等地方讨论过。

一个解决方案可能是使用非通用的、老式的、被遗忘的 ArrayList。当然,您必须访问这些项目并将它们强制转换为适当的类型,这可以通过包装类来完成。

另一种方法是序列化每个对象的对象,而不是序列化列表。

相关文章:
  • 没有找到相关文章