【发布时间】:2013-06-17 23:02:32
【问题描述】:
我不确定是否可以这样做,所以在我开始之前我会说。
我有一个 XML 文件,其中包含常用内容(字符串、布尔值等),但我也希望它具有特定点击事件的 EventHandler 作为节点之一。所有的点击事件都是普通的object,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) 出现反映类型“testxmlui.XmlFormatData”的错误.String defaultNamespace) [0x00000] in :0 在 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(System.Type 类型,System.Xml.Serialization.XmlRootAttribute 根,System.String defaultNamespace)[0x00000] 中:0 在 System.Xml.Serialization.XmlSerializer..ctor (System.Type 类型,System.Xml.Serialization.XmlAttributeOverrides 覆盖,System.Type[] extraTypes,System.Xml.Serialization.XmlRootAttribute 根,System.String defaultNamespace)[0x00000]在 :0 在 System.Xml.Serialization.XmlSerializer..ctor(System.Type 类型)[0x00000] 中:0 在 /Volumes/Developer/Developer/ftrack2/testxmlui/testxmlui/MainActivity.cs:62 中的 testxmlui.MainActivity.GenerateUI () [0x00004]
谢谢
【问题讨论】:
-
你试过在没有 EventHandler 属性的情况下反序列化它吗?这是我唯一能发现的。我有一个类似的东西,但我在 xml 中有方法名称,我使用反射调用它们,已知它们是针对一个名为 UserDelegates 的实体。希望这对你有帮助
-
是的,在没有 EventHandler 属性的情况下也尝试过,给出了同样的错误。
-
顺便说一句,XmlSerializer 不需要 [Serializable]