我正在开展一个项目,我有这个列表
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,我不确定如何为整个列表执行此操作。
答案 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>