C# 保存和加载列表
我正在做一个项目,我有这个清单C# 保存和加载列表,c#,xml,list,save,xmlserializer,C#,Xml,List,Save,Xmlserializer,我正在做一个项目,我有这个清单 List<Vara> minaVaror = new List<Vara>(); 以下是我如何将项目添加到列表中: minaVaror.Add(new Vara() {streckKod = inputBox1, artNamn = textBox2.Text }); 好的,这个列表将不时地添加项目,所以我需要能够保存和加载列表的内容/项目,这样当程序关闭和重新打开时,您就不会丢失数据 去年我们在课堂上做了类似的事情,我们使用XmlSe
List<Vara> minaVaror = new List<Vara>();
以下是我如何将项目添加到列表中:
minaVaror.Add(new Vara() {streckKod = inputBox1, artNamn = textBox2.Text });
好的,这个列表将不时地添加项目,所以我需要能够保存和加载列表的内容/项目,这样当程序关闭和重新打开时,您就不会丢失数据
去年我们在课堂上做了类似的事情,我们使用XmlSerializer将数据保存到一个XML文件中,但是这只适用于1 int,我真的不知道如何对整个列表执行此操作。根据定义,XmlSerializer无法反序列化列表或数组列表 XmlSerializer无法反序列化以下内容:ArrayList数组和List数组 所以您可以序列化列表,但不能反序列化列表 因此,您可以使用此代码在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 Assembly\Microsoft\Framework.NETFramework\v4.0\System.Runtime.Serialization.dll的引用。如何调用SerializedXML?我已经在Form1.cs中将主代码添加到它自己的类中,但是我无法调用它进行序列化,因为它找不到SerializeToXmlyou不应该使用类实例调用静态方法尝试类似于Form1.Serialize的操作
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;
}
}
}