我有一个简单的WPF应用程序,当我尝试用XmlSerializer序列化一个简单的异常时,我会得到一个XamlParseException。
MainWindow.xaml中的代码是:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>App.xaml中的代码是:
<Application x:Class="WpfApplication2.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
用于序列化的序列化程序静态类的代码是:
public static class Serializer<T>
{
/// <summary>
/// serialize an instance to xml
/// </summary>
/// <param name="instance"> instance to serialize </param>
/// <returns> instance as xml string </returns>
public static string Serialize(T instance)
{
StringBuilder sb = new StringBuilder();
XmlWriterSettings settings = new XmlWriterSettings();
using (XmlWriter writer = XmlWriter.Create(sb, settings))
{
XmlSerializer serializer = new XmlSerializer(instance.GetType());
serializer.Serialize(writer, instance);
}
return sb.ToString();
}
/// <summary>
/// deserialize an xml into an instance
/// </summary>
/// <param name="xml"> xml string </param>
/// <returns> instance </returns>
public static T Deserialize(string xml)
{
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
foreach (Type t in types)
{
XmlSerializer serializer = new XmlSerializer(t);
if (serializer.CanDeserialize(reader))
return (T)serializer.Deserialize(reader);
}
}
return default(T);
}
/// <summary>
/// store all derived types of T:
/// is used in deserialization
/// </summary>
private static Type[] types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(s => s.GetTypes())
.Where(t => typeof(T).IsAssignableFrom(t)
&& t.IsClass
&& !t.IsGenericType)
.ToArray();
}MainWindow.xaml.cs中的代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Exception e = new System.IO.IOException("blablabla", new System.IO.DirectoryNotFoundException());
MessageBox.Show(Serializer<Exception>.Serialize(e));
}
}
}当我运行这个程序时,我得到了一个例外:
“在与指定绑定约束匹配的类型'WpfApplication2.MainWindow‘上调用构造函数会引发异常。”行号'3‘和行位置'9’。
有什么问题吗?
发布于 2015-03-18 13:29:27
如果您将其测试为隔离问题,您可能会看到的是,XmlSerializer抛出了带有消息的InvalidOperationException。
存在一个错误反射类型'System.IO.IOException‘。
内部异常详细描述了为什么:
无法序列化类型为System.Exception.Data的成员System.Collections.IDictionary,
字典不能用.NET XML序列化程序序列化。就是这样。
https://stackoverflow.com/questions/29123183
复制相似问题