我有一个需要写入XML文件的Dictionary对象。 该字典包含字符串类型作为键和自定义类的对象(从System.Windows.Forms.Control派生)作为值。反映类型错误 - XML序列化问题
namespace SharpFormEditorDemo
{
[Serializable]
public static class common
{
public static Dictionary<String,CommonControl > dicControls = new Dictionary<string, CommonControl>();
public static Object objSelected = new Object();
public static int ctrlId = 0;
//The serialization and Deserialization methods.
public static void Serialize(XmlTextWriter xmlTextWriter,Dictionary<String,CommonControl> dic)
{
xmlTextWriter.WriteStartDocument();
ControlSerializer file = new ControlSerializer(dic);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ControlSerializer));
xmlSerializer.Serialize(xmlTextWriter, file);
xmlTextWriter.WriteEndDocument();
}
}
类CommonControl是这样
namespace SharpFormEditorDemo
{
public class CommonControl : System.Windows.Forms.Control
{
//private List<String> controls;
private String sql;
private int minVal; //Minimum value for a field
private int maxVal; //Maximum value for a field
private string displayValue; //Display Value
private string keyValue; //Key Value
private string clickEvent; //Click event
private string selectedIndexChangeEvent; //Combo box event.
private string validateEvent; //Validated event.
public string SelectedIndexChangeEvent
{
get { return selectedIndexChangeEvent; }
set { selectedIndexChangeEvent = value; }
}
public string ClickEvent
{
get { return clickEvent; }
set { clickEvent = value; }
}
public string ValidateEvent
{
get { return validateEvent; }
set { validateEvent = value; }
}
public string KeyValue
{
get { return keyValue; }
set { keyValue = value; }
}
public string DisplayValue
{
get { return displayValue; }
set { displayValue = value; }
}
public int MinVal
{
get { return minVal; }
set { minVal = value; }
}
public int MaxVal
{
get { return maxVal; }
set { maxVal = value; }
}
public String Sql
{
get { return sql; }
set { sql = value; }
}
//public List<String> Controls
//{
// get { return controls; }
// set { controls = value; }
//}
}
}
类CommonControl是从控制类导出。
我想要做的是将上述字典写入XML文件。
[Serializable]
public class ControlSerializer : ISerializable
{
public ControlSerializer()
{
}
private Dictionary<String, CommonControl> dicCtrl;
public Dictionary<String, CommonControl> DicCtrl
{
get { return dicCtrl; }
set { dicCtrl = value; }
}
public ControlSerializer(Dictionary<String, CommonControl> dic)
{
this.DicCtrl = dic;
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
throw new NotImplementedException();
}
}
为我使用的ControlSerializer类
而且在调用它像这样
try
{
XmlTextWriter xlw = new XmlTextWriter(@"D:\Test.xml", null);
common.Serialize(xlw, common.dicControls);
}
catch (Exception exShow)
{
的问题是,我得到一个异常说 “时出错反映类型“SharpFormEditorDemo.ControlSerializer”。“
但我得到了使用typeof运算符的类型。为什么会发生这种情况呢?对不起,如果我太长,但想给全面的照片。
感谢
在异常上发布更多详情。也适用于任何InnerExceptions。 – decyclone 2010-12-10 09:51:04
嗨Decyclone ... thnx提示帮助内部异常消息是这样的。是否因为我使用的字典对象不可序列化?无法序列化System.Collections.Generic.Dictionary'2 [[System.String,mscorlib,版本= 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],SharpFormEditorDemo.CommonControl,SharpFormEditorDemo类型的成员SharpFormEditorDemo.ControlSerializer.DicCtrl = 1.0.3996.27187,Culture = neutral,PublicKeyToken = null]],因为它实现了IDictionary。 – JCTLK 2010-12-10 09:55:16