XML序列化

//引入如下命名空间
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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值