c# 序列化 List泛型 数组 保存到文件 ,然后读文件再反序列化 成 集合或者对象

1, 如果要序列化成 指定格式 那么就要 用指定的 对象来操作,

我是序列化成xml用的是XmlSerializer ,那么你序列化用这个对象 反序列化时 也得用这个对象。

先定义一个集合,

List<Person> personList=new List<Person>{

new Person{Id=1,Name="2B",Age=28},

new Person{Id=2,Name="3B",Age=29}

};

 

XmlSerializer xs=new XmlSerializer(typeof(List<Person>));

Stream stream=new FileStream("d://test.xml",FileMode.Create,FileAccess.Write,FileShare.None);//生成xml文件保存

xs.Serializer(stream,personList);//进行序列化

stream.close();//最后关闭流

 

这样文件就保存起来了,

下面来读取反序列化:

FileStream fs=new FileStream("d://test.xml",FileMode.Open);//打开文件

var plist=(List<Person>)xs.Deserializer(fs);

fa.close();

这样就OK了。 超简单

但是 有个问题,这样生成的xml的根节点 ,是自动生成的 有时候我们想去改掉成自己想要的名称,可以这样。

 

XmlAttributeOverrides  overrides=new XmlAttributeOverrides();

XmlAttribute attr=new XmlAttribute();

attr.XmlRoot=new XmlRootAttribute("MyName");

overrides.add(typeof(List<Person>),attr);

//这里要修改下

XmlSerializer xs=new XmlSerializer(typeof(List<Person>),overrides);

这样就OK了, 但是overrides.add(typeof(List<Person>),attr); 这里的  typeof(List<Person>) 一定要和XmlSerializer xs=new XmlSerializer(typeof(List<Person>),overrides); 这里面的类型保持一样,否则 自定义的节点名字 会无效,但是程序不会报错的。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(list)