【发布时间】:2010-12-10 09:10:30
【问题描述】:
我有一个需要写入 XML 文件的 Dictionary 对象。 字典包含字符串类型作为键和自定义类的对象(派生自 System.Windows.Forms.Control )作为值。
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 类是 Controls 类的派生类。
我想要做的是将上述字典写入 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... thnx 提示帮助内部异常消息是这样的。是因为我使用的字典对象不可序列化吗?无法序列化 System.Collections.Generic.Dictionary`2 [[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[SharpFormEditorDemo.CommonControl, SharpFormEditorDemo, Version 类型的成员 SharpFormEditorDemo.ControlSerializer.DicCtrl =1.0.3996.27187, Culture=neutral, PublicKeyToken=null]],因为它实现了 IDictionary。
标签: c# .net xml serialization