这里有一个神秘的例外: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;
}
}
这是我内心异常的堆栈跟踪:
enSystem.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的任何重大新功能工作。
谢谢大家。
查看您的堆栈跟踪,我注意到方法ThrowUnclosedElements。这让我认为您得到了一个损坏或格式不正确的文件。
正如您所指出的,SOAP 序列化不支持泛型列表。据我了解,这意味着您尝试序列化列表,结果您得到了一个无法反序列化的文件。这在之前已经讨论过了,也在这里(你自己的引用)等地方讨论过。
一个解决方案可能是使用非通用的、老式的、被遗忘的 ArrayList。当然,您必须访问这些项目并将它们强制转换为适当的类型,这可以通过包装类来完成。
另一种方法是序列化每个对象的对象,而不是序列化列表。