0

我不确定这是否可以做到,所以在我开始之前我会说。

我有一个 XML 文件,其中包含通常的内容(字符串、布尔值等),但我也希望它具有特定单击事件的 EventHandler 作为节点之一。所有的点击事件都是普通的 object s,EventArgs e 品种。

我的控股班级看起来像这样

namespace testxmlui
{
[Serializable]
[XmlRoot("xmlformat")]
public class XmlFormatData
{
    private List<xmlformdata> xmlform;

    public XmlFormatData()
    {
        xmlform = new List<xmlformdata>();
    }

    [XmlElement("Element")]
    public xmlformdata[] Forms
    {
        get { return xmlform.ToArray(); }
        set { xmlform = new List<xmlformdata>(value); }
    }
}

[Serializable]
public class xmlformdata
{
    public xmlformdata()
    {
    }

    public string buttonName
    { get; set; }

    public int buttonAction
    { get; set; }

    public int buttonEvent
    { get; set; }

    public bool HasEventAttached
    { get; set; }

    public EventHandler EventHandle
    { get; set; }
}
}

然后使用反序列化

private void GenerateUI()
    {
        XmlFormatData f;
        f = null;
        try
        {
            XmlSerializer s = new XmlSerializer(typeof(XmlFormatData));
            TextReader r = new StreamReader(pathToUse);
            f = (XmlFormatData)s.Deserialize(r);
            r.Close();
        }
        catch (System.IO.FileNotFoundException e)
        {
            Console.WriteLine("Error : {0}", e.Message);
        }
        catch (System.InvalidOperationException s)
        {
            Console.WriteLine("Invalid Operation Error : {0}, {1}", s.Message, s.StackTrace);
        }
// there is more, but it's all UI code, so not really a problem
}

我是否需要做一些特别的事情来包含 EventHandler 并且任何人都可以建议我为什么会收到反序列化错误?

反序列化回溯读取

无效操作错误:在 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping (System.Xml.Serialization.TypeData typeData, System.Xml.Serialization.XmlRootAttribute root, System.String defaultNamespace) 出现反映类型“testxmlui.XmlFormatData”的错误) [0x00000] 在 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping 的 0 中(System.Type 类型,System.Xml.Serialization.XmlRootAttribute 根,System.String defaultNamespace)[0x00000] 在 System.Xml.Serialization 的 0 中。 XmlSerializer..ctor(System.Type 类型,System.Xml.Serialization.XmlAttributeOverrides 覆盖,System.Type[] extraTypes,System.Xml.Serialization.XmlRootAttribute 根,System.String defaultNamespace)[0x00000] 在 System.Xml 中:0 .Serialization.XmlSerializer..ctor(System.Type 类型)[0x00000] in :0 at testxmlui.MainActivity。GenerateUI () [0x00004] 在/Volumes/Developer/Developer/ftrack2/testxmlui/testxmlui/MainActivity.cs:62

谢谢

4

1 回答 1

2

XmlSerializer 是一个数据序列化器——它不会也不能序列化委托/事件,因为委托基本上是关于实现的——而不是数据。此外,序列化事件意味着您需要将序列化程序级联成更多超出预期模型的类型。所以不,这对于那个序列化程序来说是不可行的。无论如何,IMO 序列化事件通常会暗示代码气味 - 同样,它们不是数据。

关于例外:查看 InnerException - 它实际上提供了非常详细的消息,但您需要深入挖掘一个级别。

于 2013-06-18T14:50:14.177 回答