【发布时间】:2016-04-30 04:36:36
【问题描述】:
我正在尝试序列化一个 winform,最终目标是能够在表单的各种控件中重新创建值。我的表单包含典型的控件,按钮/单选按钮/复选框/文本框/列表框/选项卡控件。
我收到此错误:
An exception of type 'System.InvalidOperationException' occurred
in System.Xml.dll but was not handled in user code
Additional information: There was an error reflecting type
'Receptionist_Program.Objects.Client.Client_NCQ'.
我为每个要保存的值设置属性:
public bool CbMedTreat
{
get { return cbMedTreat.Checked; }
set { cbMedTreat.Checked = value; }
}
public List<Client_AddDoctor> TxtDocExplain // Client_AddDoctor is another form
{
get { return listDoctors; }
set { listDoctors = value; }
}
// etc, variety of string and bool properties
在班级的顶部我有装饰:
[Serializable]
public partial class Client_NCQ : Form
最后,这是我做序列化的代码:
Client_NCQ badname = new Client_NCQ();
badname.Initialize();
badname.ShowDialog();
string result = "";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Client_NCQ));
// Error occurs here on above line: new XmlSerializer(typeof(Client_NCQ))
using (StringWriter textWriter = new StringWriter())
{
xmlSerializer.Serialize(textWriter, badname);
result = textWriter.ToString();
}
到目前为止,我尝试了两种不同的方法,首先,我将装饰 [XmlIgnore] 添加到 List 属性中,这没有区别。其次,我尝试确保构造函数为空且没有参数。
【问题讨论】:
-
你的
InnerException是什么?它应该为您提供有关其存在问题的属性的详细信息。如果表单上有非可视组件,我打赌Site -
第一级:
{"Cannot serialize member 'System.ComponentModel.Component.Site' of type 'System.ComponentModel.ISite', see inner exception for more details."}。在该异常中,是最后一个内部异常:{"Cannot serialize member System.ComponentModel.Component.Site of type System.ComponentModel.ISite because it is an interface."} -
是的,我赢了! :-) 我认为您不能按原样序列化表单,因为它有一些不可序列化的组件。您需要将数据与表单分开,并仅序列化数据
-
有道理,我将创建一个单独的对象并使用它来填充表单。非常感谢您的帮助!
标签: c# xml winforms serialization