将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}

我将感谢有助于解决此错误的建议,或对保存和检索输入数据的不同方法的建议。

将C#表单序列化为XML

您保存的类错误。尝试:

XmlSerializer serializer = new XmlSerializer(typeof(CustomerInfo));

似乎错过了Serializable属性。请检查一下。此外,除了已经建议的解决方案外,您还可以考虑使用SoapFormatter和BinaryFormatter。

为什么要序列化CustomerInfoForm

是否要序列化CustomerInfo

我会使用DataContractSerializer而不是XmlSerializer。它更灵活,更与时俱进(至少我认为是这样)。

var serializer = new DataContractSerializer(typeof(CustomerInfo));

此序列化程序类型自起可用。Net 3.0,如果您正在使用此版本或后者,请尝试一下。