保存和加载列表

时间:2013-12-14 17:27:05

标签: c# xml list save xmlserializer

我正在开展一个项目,我有这个列表

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 });

好的,所以这个列表将不时添加项目,所以我需要能够保存和加载列表的内容/项目,这样当程序关闭并重新打开时你不会丢失数据

去年我们在课堂上做了类似的事情,我们用XmlSerializer将数据保存到XML文件中,但是只有1个int,我不确定如何为整个列表执行此操作。

1 个答案:

答案 0 :(得分:0)

根据定义,XmlSerializer不能反序列化List&lt; T&gt;。或ArrayList。 From MSDN

XmlSerializer无法反序列化以下内容:ArrayList的数组和List&lt; T&gt;的数组。

因此,您可以序列化List&lt; T&gt;,但无法反序列化List&lt; T&gt;。

因此,您可以使用此代码在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)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll的引用。< / p>