1、XmlSerialize。

  xmlSerialize提供通过Serialize和Deserialize两组方法进行序列化和反序列化。

  public class XmlSerialize

  {

    public XmlSerialize(Type type);

    public void Servialize(Stream stream,object o);

    public void Serialize(TextWriter textWriter,object o);

    public void Serialize(XmlWriter xmlWriter,object o);

    //反序列化方法

    public object Deserialize(Stream stream);

    public object Deserialize(TextReader textReader);

    public object Deserialize(XmlReader xmlReader);

  }

1)、XmlSerialize默认的序列化规则:

  a、XML根节点的名称为对象类型的名称,没有命名空间。

  b、对象属性或字段成员以XmlElement的形式输出,名称和属性或字段名称一致,不具有命名空间。

  c、只有public属性或字段才会参与序列化。

  d、XmlElement的顺序与对应的属性或字段在类型中定义的顺序一致。

  e、类型定义中,要有一个空的无参数的构造函数,反序列化的时候需要调用它创建对象

  f、pulic属性的字段要求是可读写的,只读的或只写的,不序列化出来。注:{get;set;}不会有问题,{get;private set}会抛出异常。

2)、通过定制XmlSerialize控制xml结构:

  这种方式控制生成的Xml结构,通过一些XmlSerialize重载的构造函数完成,用这种方式序列化的时候,要注意存在类型的继承的时候,每个属性的类型不要使用基类型,如果使用要通过构造函数中的Type[]把所有的基类类型传入进去进行序列化,示例如下:

  XmlAttributes attributes =new XmlAttributes();

  attributes.XmlAttribute = new XmlAttributeAttribute("Id");//把Id属性放到根节点的子元素。

  XmlAttributeOverrides attributeOverrides = new XmlAttributeOverrides();

  attributeOverrides.Add(typeof(Order),"Id",attributes);

  XmlRootAttribute rootAttribute =new XmlRootAttributes("Ord");//改变根节点的名称为Ord

  

  using(XmlWrite writer =new XmlTextWriter("Order.xml",Encoding.UTF8))

  {

    XmlSerializer serializer =new XmlSerializer (typeof(Order),attriuteOverrides,null,rootAttribute,"http://www.hanshuai.com");

    serializer.Serialize(writer,order);

  }

3)、通过定制数据类型控制Xml结构:

  a、在类型上应用XmlRootAttribute特性,通过Name 和Namespace属性改变根节点的名称和命名空间。

  b、在字段和属性上应用System.Xml.Serializtion.XmlAttributeAttribute特性,将其序列化成Xml属性,同时通过AttributeName和Namespace定制Xml属性的名称和命名空间。

  c、在字段和属性上应用System.Xml.Serializtion.XmlElementAttribute特性,将其序列化成Xml属性,同时通过ElementName和Namespace和Order定制Xml属性的名称和命名空间和先后顺序。

但是WCF使用最多的是DataContractSerialize的序列化器,对对象进行序列化的。

 

 

posted on 2013-07-13 19:46  Kelly_HanShuai  阅读(174)  评论(0)    收藏  举报