首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlSerializer引起XamlParseException

XmlSerializer引起XamlParseException
EN

Stack Overflow用户
提问于 2015-03-18 13:18:56
回答 1查看 208关注 0票数 0

我有一个简单的WPF应用程序,当我尝试用XmlSerializer序列化一个简单的异常时,我会得到一个XamlParseException。

MainWindow.xaml中的代码是:

代码语言:javascript
复制
<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中的代码是:

代码语言:javascript
复制
<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>

用于序列化的序列化程序静态类的代码是:

代码语言:javascript
复制
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中的代码是:

代码语言:javascript
复制
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’。

有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 13:29:27

如果您将其测试为隔离问题,您可能会看到的是,XmlSerializer抛出了带有消息的InvalidOperationException

存在一个错误反射类型'System.IO.IOException‘。

内部异常详细描述了为什么:

无法序列化类型为System.Exception.Data的成员System.Collections.IDictionary,

字典不能用.NET XML序列化程序序列化。就是这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29123183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档