将C#表单序列化为XML
本文关键字:XML 序列化 表单 | 更新日期: 2023-09-27 17:59:17
我创建了一个客户信息表单,并将文本框绑定到表单类中的属性。这个简单表单在表单上有10个文本框,这些文本框绑定到表单中的属性
- 客户名称
- PhonePrimary.phoneNumber
- PhonePrimary.phoneType
- PhonePrimary。文本消息OK
- 电话Daytime.phoneNumber
- 电话Daytime.phoneType
- 电话白天。文本消息OK
- 电话号码
- PhoneEvening.phoneType
- 电话晚会。文本消息OK
填写完这些值后,我想创建一个XML文件来保存这些值,以便以后可以检索这些值。
using System;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;
namespace SimpleCustomerInfo
{
public partial class CustomerInfoForm : Form
{
CustomerInfo ci;
public CustomerInfoForm()
{
InitializeComponent();
ci = new CustomerInfo();
}
private void btnSave_Click(object sender, EventArgs e)
{
XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfoForm));
TextWriter textWriter = new StreamWriter(@"C:'testme.xml");
serializer.Serialize(textWriter, ci);
textWriter.Close();
}
public partial class CustomerInfo
{
public string CustomerName { get; set; }
public PhoneInfo PhonePrimary { get; set; }
public PhoneInfo PhoneDays { get; set; }
public PhoneInfo PhoneEvening { get; set; }
}
public class PhoneInfo
{
public string number { get; set; }
public string type { get; set; }
public bool textOk { get; set; }
}
}
}
当填写表单并按下保存按钮时,会生成错误。最内部的异常错误是:{"无法序列化类型为System.ComponentModel.ISite的成员System.ComponentModel.Component.Site,因为它是一个接口。"}数据:{System.Collections.ListDictionaryInternal}
我将感谢有助于解决此错误的建议,或对保存和检索输入数据的不同方法的建议。
您保存的类错误。尝试:
XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfo));
似乎错过了Serializable属性。请检查一下。此外,除了已经建议的解决方案外,您还可以考虑使用SoapFormatter和BinaryFormatter。
为什么要序列化CustomerInfoForm
?
是否要序列化CustomerInfo
?
我会使用DataContractSerializer而不是XmlSerializer
。它更灵活,更与时俱进(至少我认为是这样)。
var serializer = new DataContractSerializer(typeof(CustomerInfo));
此序列化程序类型自起可用。Net 3.0,如果您正在使用此版本或后者,请尝试一下。