我不确定这是否可以做到,所以在我开始之前我会说。
我有一个 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
谢谢