Xml序列化和反序列化

1.  XmlSerializer 

   该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。

   2. XmlAttributeAttribute 

   指定类的公共域或读/写属性对应xml文件的Attribute

   例:[XmlAttribute(“type”)] or [XmlAttribute(AttributeName=”type”)]

   3. XmlElementAttribute

   指定类的公共域或读/写属性对应xml文件的Element

   例:[XmlElement(“Maufacturer”)] or [XmlElement(ElementName=”Manufacturer”)]

   4. XmlRootAttribute

   Xml序列化时,由该特性指定的元素将被序列化成xml的根元素。

   例:[XmlRoot(“RootElement”)] or [XmlRoot(ElementName = “RootElements”)]

   5. XmlTextAttribute 

   Xml序列化时,由该特性指定的元素值将被序列化成xml元素的值。一个类只允许拥有一个该特性类的实例,因为xml元素只能有一个值。

   6. XmlIgnoreAttribute

   Xml序列化时不会序列化该特性指定的元素。

要注意

1. 序列化数据只包含数据本身以及类的结构。不包括类型标识和程序集信息。

2. 只能序列化公共属性和字段。如果需要序列化非公共数据,请使用 BinaryFormatter 类而不是 XML 序列化。

3. 类必须有一个将由 XmlSerializer 序列化的默认构造函数。

4. 不能序列化方法。

 

需要引用using System.Xml.Serialization;这个类

添加测试数据 Goods g1 = new Goods();

            g1.name = "可乐";

            g1.price = 2;

            g1.num = 2200;

            Goods g2 = new Goods();

            g2.name = "雪碧";

            g2.price = 2;

            g2.num = 2200;

            List<Goods> list = new List<Goods>();

            list.Add(g1);

            list.Add(g2);

序列化

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

            using (StreamWriter sw=File.CreateText("goods.xml"))                

            {

                xs.Serialize(sw, list);

            }

            Console.ReadLine();

StreamWriter 写入文件

反序列化

   List<Goods> list = new List<Goods>();

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

            using (StreamReader sr = File.OpenText("goods.xml"))

            {

                list = xs.Deserialize(sr) as List<Goods>;

            }

            foreach (var item in list)

            {

                Console.WriteLine(item.name);

            }

            Console.ReadLine();

StreamReader 读取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值