2011-06-17 131 views
2

我已创建客户信息表单并将文本框绑定到表单类中的属性。这个简单的形式具有绑定到属性的形式将C#表单序列化为XML

  • 客户名称
  • PhonePrimary.phoneNumber
  • PhonePrimary.phoneType
  • PhonePrimary.TextMessageOK
  • PhoneDaytime.phoneNumber形式10个文本框
  • PhoneDaytime.phoneType
  • PhoneDaytime.TextMessageOK
  • PhoneEvening.phoneNumber
  • PhoneEvening.phoneType
  • PhoneEvening.TextMessageOK

一旦这些值已经填写了,我想创建一个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

我将不胜感激的建议,将有助于解决这个错误或建议采取不同的方法来保存和检索输入的数据。

回答

2

您正在保存错误的类。尝试:

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

感谢您的评论。现在课程已保存,但没有任何数据。我的数据绑定一定有问题。 – DarwinIcesurfer 2011-06-17 04:35:58

1

你为什么想要序列化CustomerInfoForm

难道你不想序列化CustomerInfo?我想用DataContractSerializer而不是XmlSerializer。它更加灵活,并且更新(至少我认为)。

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

这串类型可因为NET 3.0,给它一个尝试,如果你正在使用这个版本还是后者。

2

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

+0

我在哪里设置Serializable属性?我没有看到这是表单的ide属性中的一个选项。 – DarwinIcesurfer 2011-06-17 04:50:23

+0

它是要在要序列化的类上设置的属性。 – Incognito 2011-06-17 05:20:55