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的序列化器,对对象进行序列化的。
浙公网安备 33010602011771号