将列表保存到 XML
Posted
技术标签:
【中文标题】将列表保存到 XML【英文标题】:Saving List to XML 【发布时间】:2013-12-14 23:55:41 【问题描述】:我正在尝试将我的列表保存到一个 XML 文件中,以便稍后在重新打开程序时再次加载数据。
这是我尝试保存数据的代码:
public static void SerializeToXml<T>(T obj, string fileName)
using (var fileStream = new FileStream(@"C:\\Users\\Kevin\\Desktop\\Save.XML", FileMode.Create))
var ser = new XmlSerializer(typeof(T));
ser.Serialize(fileStream, obj);
fileStream.Close();
我使用这段代码来调用函数:
Saving.SerializeToXml<List<Vara>>(minaVaror, @"C:\\Users\\Kevin\\Desktop\\Save.XML");
但是,当我单击按钮尝试保存数据时,程序崩溃了,我留下了这个错误/警告:
Barline_1.Vara is inaccessible due to its protection level. Only public types can be processed.
这是它抱怨的代码行:
var ser = new XmlSerializer(typeof(T));
有什么想法可能是错的吗?
【问题讨论】:
作为一个站点说明:fileName
在SerializeToXml
中有什么用?
您是否认为Barline_1
的定义与问题无关,所以没有发布?
【参考方案1】:
根据定义,XmlSerializer 不能反序列化 List 或 ArrayList 来自Msdn
The XmlSerializer cannot deserialize the following: arrays of ArrayList and arrays of List<T>.
所以你可以序列化一个 List 但你不能反序列化 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 Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Runtime.Serialization.dll
【讨论】:
以上是关于将列表保存到 XML的主要内容,如果未能解决你的问题,请参考以下文章