//引入如下命名空间
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);
}
XML序列化
最新推荐文章于 2024-07-21 17:52:27 发布