根據定義,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。
如何調用SerializeToXml?我在Form1.cs中將主代碼添加到它自己的類中但是我無法調用它來進行序列化,因爲它無法找到SerializeToXml –
您不應該使用類實例來調用靜態方法嘗試像這樣Form1.Serialize() –
我已經更新了我的答案看一看 –