2013-12-14 92 views
0

我工作的一個項目,我有這個名單保存和讀取列表

List<Vara> minaVaror = new List<Vara>(); 

它從該類創建:

class Vara 
{ 
    public double streckKod { get; set; } 
    public string artNamn { get; set; } 
} 

這就是我如何將項目添加到列表:

minaVaror.Add(new Vara() {streckKod = inputBox1, artNamn = textBox2.Text }); 

好的,所以這個列表將被添加項目到現在和然後所以我需要能夠保存和加載連接ent /項目,這樣當程序關閉並重新打開時,您不會丟失數據。

去年我們在類中做了類似的事情,我們用XmlSerializer將數據保存到了一個XML文件中,但是這只是一個int,我不確定如何做到這一點。

回答

0

根據定義,XmlSerializer不能反序列化列表< T>或ArrayList。 From MSDN

XmlSerializer無法反序列化以下內容:ArrayList的數組和List的數組< T>。

所以你可以序列化一個列表< T>,但是你不能反序列化列表< T>。

因此,您可以使用此代碼在XML中序列化並反序列化XML文件。

namespace DataContractSerializerExample 
{ 
    using System; 
    using System.Collections; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Runtime.Serialization; 
    using System.Xml; 

    // You must apply a DataContractAttribute or SerializableAttribute 
    // to a class to have it serialized by the DataContractSerializer. 
    [DataContract(Name = "Vara", Namespace = "http://www.contoso.com")] 
    public class Vara 
    { 
     [DataMember()] 
     public double streckKod { get; set; } 
     [DataMember] 
     public string artNamn { get; set; } 
    } 

    public sealed class Test 
    { 
     private Test() { } 

     public static void Main() 
     { 
      List<Vara> minaVaror = new List<Vara>() { new Vara() { streckKod = 5.0, artNamn = "test1" }, new Vara() { streckKod = 5.0, artNamn = "test2" }, new Vara() { streckKod = 5.0, artNamn = "test3" } }; 
      string fileName = "test.xml"; 
      Serialize<List<Vara>>(fileName, minaVaror); 
      List<Vara> listDes = Deserialize<List<Vara>>(fileName); 
     } 

     public static void Serialize<T>(string fileName, T obj) 
     { 
      FileStream writer = new FileStream(fileName, FileMode.Create); 
      DataContractSerializer ser = 
       new DataContractSerializer(typeof(T)); 
      ser.WriteObject(writer, obj); 
      writer.Close(); 
     } 

     public static T Deserialize<T>(string fileName) 
     { 
      FileStream fs = new FileStream(fileName, 
      FileMode.Open); 
      XmlDictionaryReader reader = 
       XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas()); 
      DataContractSerializer ser = new DataContractSerializer(typeof(T)); 
      T des = 
       (T)ser.ReadObject(reader, true); 
      reader.Close(); 
      fs.Close(); 
      return des; 
     } 
    } 
} 

注意:你應該添加一個引用到C:\ Program Files文件(x86)的\參考大會\微軟\ Framework.NETFramework \ V4.0 \ System.Runtime.Serialization.dll。

+0

如何調用SerializeToXml?我在Form1.cs中將主代碼添加到它自己的類中但是我無法調用它來進行序列化,因爲它無法找到SerializeToXml –

+0

您不應該使用類實例來調用靜態方法嘗試像這樣Form1.Serialize() –

+0

我已經更新了我的答案看一看 –