2011-06-17 73 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