XML序列化

来源:互联网 发布:java hashmap实现原理 编辑:程序博客网 时间:2024/05/29 08:36
//引入如下命名空间using System;using System.Xml;using System.Xml.Serialization;using System.IO;//序列化简单的对象XmlSerializer ser = new XmlSerializer(typeof(AA)  );ser.Serialize(Console.Out,new AA{ ID=1,PID=2});/*显式声明XML元素,如果不设置这些特性(Attribute),那么XML元素的名字就是.NET对象属性的名字。*/[XmlRoot("aa")]public class AA{  [XmlElement("id")]  public int ID { get; set; }  [XmlElement("pid")]  public int PID { get; set; }}/*显式声明XML数组和数组类型,一般声明XML数组,不推荐使用List泛型对象,比如在使用WebService中框架的程序中,所有的IEnumerable泛型对象都被解释为数组*/[XmlArray(ElementName = "DETAIL")][XmlArrayItem("STRUCT")]public TStruct[] DETAIL { get; set; }/*如果不想对该字段进行XML序列化操作,添加该特性,特别地,如果对象之间存在循环引用,例如A有IEnumberable<B>的一个属性,B有类型为A的Parent的字段,最好显式使用该特性阻止序列化*/[XmlIgnore]private String HashValue { get; set; }/*显式设置XML根元素。如果待序列化的类是一个抽象类,或者是一个继承的类。XmlRoot特性将会失效,在序列化这些类时,需要显式指定XML的根元素名,这被称为XML属性重载(从类名可以看出)*/XmlAttributeOverrides xao = new XmlAttributeOverrides();XmlAttributes rootAttr = new XmlAttributes();rootAttr.XmlRoot = new XmlRootAttribute("XMLDATA");xao.Add(this.GetType(), rootAttr);//清除根元素的XML命名空间,有时不需要那些冗长的XML命名空间声明。XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();xsn.Add("", "");XmlSerializer xs = new XmlSerializer(this.GetType(), xao);//设置XML文档声明,例如<?xml version="1.0" encoding="utf-8?>using (MemoryStream ms = new MemoryStream()){  XmlWriterSettings xmlSetting = new XmlWriterSettings();  xmlSetting.Encoding = Encoding.UTF8;  XmlWriter utf8wr = XmlWriter.Create(ms, xmlSetting);  //MemeoryStream需要设置该属性  ms.Position = 0;  xs.Serialize(utf8wr, this, xsn);}