首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TargetInvocationException未被处理

TargetInvocationException未被处理
EN

Stack Overflow用户
提问于 2014-06-06 11:05:03
回答 3查看 6.5K关注 0票数 0

我搜索了很多,找到了一些解决方案,但它们对我不起作用。我有一些用WPF编写的GUI创建工具,我希望能够序列化对象的实例。

我制作了一个虚拟版本来检查序列化是否有效,但我得到了一个TargetInvocationException

该项目有两个扩展CanvasItem的标签和图像类,一个包含集合CanvasItems的布局类和一个包含布局集合的项目类。

我为序列化而编写的类:

代码语言:javascript
复制
public class XMLWrite
{
    public static void WriteXML(LCTProject project)
    {
        System.Xml.Serialization.XmlSerializer writer =
        new System.Xml.Serialization.XmlSerializer(typeof(LCTProject));
        string path = Directory.GetParent(Directory.GetParent(Directory.GetParent(
            System.AppDomain.CurrentDomain.BaseDirectory.ToString()).ToString()).ToString()).ToString()
            + project.name + ".xml";
        System.IO.StreamWriter file = new System.IO.StreamWriter(path);
        writer.Serialize(file, project);
        file.Close();
    }

    public static LCTProject ReadXML(string name)
    {
        System.Xml.Serialization.XmlSerializer reader =
            new System.Xml.Serialization.XmlSerializer(typeof(LCTProject));
        string path = Directory.GetParent(Directory.GetParent(Directory.GetParent(
            System.AppDomain.CurrentDomain.BaseDirectory.ToString()).ToString()).ToString()).ToString()
            + name + ".xml";
        System.IO.StreamReader file = new System.IO.StreamReader(path);
        LCTProject project = new LCTProject();
        project = (LCTProject)reader.Deserialize(file);
        return project;
    }
}

以及我如何努力让它运行:

代码语言:javascript
复制
public MainWindow()
    {
        InitializeComponent();

        LCTLabel label1 = new LCTLabel();
        label1.locationX = 6;
        label1.locationY = 8;
        label1.alignment = CanvasItem.Alignment.Bottom;
        label1.text = "hi hi hi";
        label1.textSize = 12;
        Color clr = new Color();
        label1.color = clr;

        LCTImage img = new LCTImage();
        img.locationX = 1;
        img.locationY = 2;
        img.alignment = CanvasItem.Alignment.Right;
        img.path = @"C:\";

        LCTImage img2 = new LCTImage();
        img2.locationX = 500;
        img2.locationY = 100;
        img2.alignment = CanvasItem.Alignment.Up;
        img2.path = @"C:\";

        LCTLayout layout1 = new LCTLayout();
        LCTLayout layout2 = new LCTLayout();

        layout1.items.Add(label1);
        layout1.items.Add(img);
        layout2.items.Add(img);
        layout2.items.Add(img2);

        LCTProject project = new LCTProject();
        project.layouts.Add(layout1);
        project.layouts.Add(layout2);

        XMLWrite.WriteXML(project);
    }

我得到了以下例外:

TargetInvocationException未处理--在PresentationFramework.dll附加信息中发生了“System.Reflection.TargetInvocationException”类型的未处理异常:调用的目标引发了异常。

我怎样才能解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2014-06-06 11:22:39

当远程处理调用跨越应用领域边界时,通常会引发此异常。如果你知道在哪里寻找细节,那也不是毫无意义的。关键属性是InnerException -您应该检查这个属性以获得真正发生的异常。这个属性很可能包含另一个TargetInvocationException实例,所以您应该继续挖掘InnerException链,直到找到有意义的东西为止。

票数 1
EN

Stack Overflow用户

发布于 2014-06-06 11:33:49

试着找出痕迹和InnerException。

代码语言:javascript
复制
    try
    {
    //somecode
    }
    catch (Exception e)
    {
     Console.WriteLine("Error trace {0}", e.Trace);
     Console.WriteLine ("Inner Exception is {0}",e.InnerException);
    }
票数 0
EN

Stack Overflow用户

发布于 2014-06-07 09:12:54

事实证明,尝试和捕捉是没有帮助的。有两件重要的事情要记住:

首先,使用XmlSerializer不能序列化没有参数的构造函数的对象。应该添加没有参数的构造函数,或者如果不需要构造函数,就不要添加构造函数。 其次,序列化仅继承同一个类的不同对象(不同类)的集合存在问题。假设基类是A;B和C继承A,那么您应该添加到A的定义中:

代码语言:javascript
复制
[XmlInclude(typeof(B))]
[XmlInclude(typeof(C))]
public class A
{...}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24080327

复制
相关文章

相似问题

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