Xml序列化和反序列化

经常见XML序列化的文章,对该序列化方式并不是太晓得,看了MSDN和一些资料后有了大致的了解,大道理讲不出来,上 代码先:

方式一 通过XmlSerialize直接序列化:

Class BeSerialized

{

//某字段

public int someFiled; 

//公共类的一个可序列化的属性

private bool serialme;

public bool SerialMe
{
     get { return serialme; }
     set { serialme = value; }
}

 

}

class process

{

public void Main()

{

SerialIt();

DeSerialIt();

}

SerialIt()

{

BeSerialized bs=new BeSerialized();

bs.someFiled=;

bs.SerialMe=;

XmlSerialize xs=new XmlSerialize(typeof(BeSerialized));

StreamWriter sw=

xs.Serialze(sw,bs);

}

DeSerialIt()

{

XmlSerialze xs=new XmlSerialize(typeof(BeSerialized));

StreamReader sr

BeSerialized bs=(BeSerialized)xs.DeSerialize(sr);

}

}

方式二 手动在要序列化的类设置属性类型

public class Student
{
    private int id;
    [xmlAttribute]
    public int ID   //序列化时作为Student节点的属性而不是默认的子节点
    {
        get { return id; }

        set { id = value; }
    }
    private string name;
   [XmlElement("sname")]
    public string Name  //节点名称为sname而不是默认的Name
    {
        get { return name; }
        set { name = value; }
    }
    private int age;

    [XmlIgnore]

    public int Age      //忽略该属性,不存入XML文件
    {
        get { return age; }
        set { age = value; }
    }

    internal int score = 88;
    public override string ToString()
    {
        return "id:" + id + "  name:" + name + "  age:" + age + " score:" + score;
    }
}

还有很多,诸如XmlAttribute,XmlArray之类的标签,这样做的好处是可以控制生成xml文档的元素组成结构,

 

 

方式三----继承IXmlSerialize接口

 public class YouCanSerializeMe1:IXmlSerializable
    {
        public YouCanSerializeMe1()
        {

        }
        private int pro1;

        public int Pro1
        {
            get { return pro1; }
            set { pro1 = value; }
        }
        private string pro2;

        public string Pro2
        {
            get { return pro2; }
            set { pro2 = value; }
        }

 

        #region IXmlSerializable 成员

        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return (null); 
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            reader.Read();
            reader.ReadStartElement();

        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteStartElement("aaaa");
            writer.WriteStartAttribute("bbbb");
            writer.WriteEndAttribute();
            writer.WriteValue("ccc");
            writer.WriteEndElement();
        }
        #endregion
    }

 

 YouCanSerializeMe1 y1 = new YouCanSerializeMe1();
 XmlSerializer xmls = new XmlSerializer(typeof(YouCanSerializeMe1));
 StreamWriter sw = new StreamWriter(Application.StartupPath + "//button4.xml");
 xmls.Serialize(sw, y1);


通过以上三种方式我们不难发现,最简单的第一种例子,直接将对象通过XmlSerialize序列化,不考虑序列化后的文档结构,直接序列化对象,

第二种例子,直接在要序列化的类中添加标签,这样生成的Xml格式就可以在序列化前就控制一下

第三种例子,要序列化的类继承IXmlSerialize接口,继承了改接口后,在ReadXml和WriteXml方法里添加控制Xml文档的代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值