14.3 XML串行化

  使用XML串行化能够方便XML的存储或传输,能够把一个对象的公共域和属性保存为一种串行格式的过程,反串行化则是使用串行的状态信息将对象从串行XML状态还原为初始状态的过程。.NET Framework提供了命名空间来简化开发人员进行XML串行化。

14.3.1 XmlSerializer串行化类
  .NET Framework提供了System.Runtime.Serialization和System.Xml.Serialization以提供串行化功能。而System.Xml.Serialization提供了一个XmlSerializer类,该类可以将一个对象串行和反串行化为XML格式。XmlSerializer类虽然能够执行串行化和反串行化,但是串行化和反串行化有一个最大的区别,就是串行化调用Serialize方法,而反串行化调用Deserialize方法。
  如果需要将一个对象进行XML串行化,可以在类前添加[Serializable()]标识,声明一个定制串行化属性,如果需要将整个类都能够支持串行化,则必须添加该属性。XML串行化还包括以下属性:
1)[XmlRoot]:用来识别作为XML文件根元素的类或结构,可以用此标记把一个元素的名称设置为根元素。
2)[XmlElement]:共有的属性或字段可以作为一个元素被串行化到XML结构中。
3)[XmlAttribute]:共有的属性或字段可以作为一个属性被串行化到XML结构中。
4)[XmlIgnore]:共有的属性或字段不包括在串行化的XML结构中。
5)[XmlArray]:共有的属性或字段可以作为一个元素数组被串行到XML结构中。
6)[XmlArrayItem]:用来识别可以放到一个串行化数组中的类型。

14.3.2 基本串行化
  基本串行化是指让.NET Framework自动的对对象进行串行化操作。使用基本串行化进行操作,只要求对象拥有类属性[Serializable()]即可。如果类中的某些属性或字段不需要进行串行化操作,则使用[NonSerializable()]属性即可,示例代码如下所示。
+展开
-C#
using System.Xml.Serialization;
namespace Ser
{
    [Serializable()]//设置串行化属性
    class MySer
    {
        private string Shop { getset; }//设置Shop属性
        private string Name { getset; }//设置Name属性
        private string Phone { getset; }//设置Phone属性
        private string Seller { getset; }//设置Seller属性
        [NonSerialized()]//设置非串行化
        private string Age { getset; } //设置Age属性
    }
}

  上述代码使用了[Serializable()]属性声明一个类,则该类的成员都能够被串行化,而Age属性使用了[NonSerializable()]属性声明了该属性不应被串行化。使用[NonSerializable()]能够精确的控制串行化。若需要将类进行XML串行,则可以通过使用[XmlAttribute]等属性进行XML串行化操作,示例代码如下所示。
+展开
-C#
using System.Xml.Serialization;
namespace Ser
{
    [Serializable()]//设置串行化
    [XmlRoot("SerXML")]
    class MySer
    {   
        [XmlElement("Shop")]//设置节点属性
        private string Shop { getset; }//设置Shop属性
        [XmlElement("Name")]//设置节点属性
        private string Name { getset; }//设置Name属性
        [XmlElement("Phone")]//设置节点属性
        private string Phone { getset; }//设置Phone属性
        [XmlElement("Seller")]//设置节点属性
        private string Seller { getset; }//设置Seller属性
        [NonSerialized()]//设置非串行化
        [XmlElement("Age")]//设置节点属性
        private string Age { getset; }//设置Age属性
    }
}

上述代码运行后的结果形式呈现为XML格式,其格式如下所示。
<Shop>this.Shop</Shop>
<Name>this.Name</Name>
<Phone>this.Phone</Phone>
<Seller>this.Seller</Seller>
//<Age></Age>

  在串行化结果输出时,并没有输出Age标签,是因为在Age属性前定义了[NonSerializable()]以控制该字段不会被串行化输出。

加支付宝好友偷能量挖...


评论(1)网络
阅读(121)喜欢(0)Asp.Net/C#/WCF