首頁 > 軟體

.NET中XML序列化和反序列化常用類和屬性小結

2022-04-02 10:00:55

序列化和反序列化是指什麼?

序列化(seriallization): 將物件轉化為便於傳輸的資料格式, 常見的序列化格式:二進位制格式,位元組陣列,json字串,xml字串。
反序列化(deseriallization):將序列化的資料恢復為物件的過程。

XmlSerializer類

  該類用一種高度鬆散耦合的方式提供序列化服務。你的類不需要繼承特別的基礎類別,而且它們也不需要實現特別的介面。相反,你只需在你的類或者這些類的公共域以及讀/寫屬性里加上自定義的特性。XmlSerializer通過反射機制讀取這些特性並用它們將你的類和類成員對映到xml元素和屬性(在物件和 XML 檔案之間進行序列化和反序列化操作)。

.NET-XML序列化和反序列化簡單範例程式碼

using System.IO;
using System.Xml.Serialization;
 
namespace Practices.Common
{
    public class SimpleSerializer
    {
        /// <summary>
        /// Model實體物件序列化為XML字串
        /// </summary>
        /// <typeparam name="T">物件型別</typeparam>
        /// <param name="t">Model實體物件</param>
        /// <returns></returns>
        public static string SerializeXMLL<T>(T t)
        {
            using (StringWriter sw = new StringWriter())
            {
                XmlSerializer xmlSerializer = new XmlSerializer(t.GetType());
                xmlSerializer.Serialize(sw, t);
                return sw.ToString();
            }
        }
 
        /// <summary>
        /// XML反序列化為物件
        /// </summary>
        /// <typeparam name="T">物件型別</typeparam>
        /// <param name="xml">xml字串</param>
        /// <returns></returns>
        public static T Deserialize<T>(string xml)
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            StringReader stringReader = new StringReader(xml);
            return (T)xmlSerializer.Deserialize(stringReader);
        }
 
    }
}

XmlTypeAttribute類

   該類主要控制當屬性目標由XML序列化時生成的XML節點。

應用範例

/// <summary>
/// Envelope
/// </summary>
[XmlType(TypeName = "envelope")]
public class CityRes
{
    public Header header { get; set; }
 
    public Response response { get; set; }
 
}

XmlElementAttribute類

   該類用於指示公共欄位或屬性在XML序列化或反序列化包含它們的物件時表示XML元素。

應用範例

/// <summary>
/// Envelope
/// </summary>
public class CityRes
{
    /// <summary>
    /// header
    /// </summary>
    [XmlElement("header")]
    public Header header { get; set; }
 
    /// <summary>
    /// response
    /// </summary>
    [XmlElement("response")]
    public Response response { get; set; }
 
}

XmlAttributeAttribute類

  該類指定XML序列化必須將類成員序列化為XML屬性。

應用範例

/// <summary>
/// Version
/// </summary>
public class Version
{
    /// <summary>
    /// port
    /// </summary>
    [XmlAttribute("port")]
    public string port { get; set; }
 
    /// <summary>
    /// host
    /// </summary>
    [XmlAttribute("host")]
    public string host { get; set; }
 
    /// <summary>
    /// text
    /// </summary>
    [XmlAttribute("text")]
    public string text { get; set; }
 
}

XmlArrayAttribute類

  該類主要用於XML元素陣列的應用(相當於就是集合的宣告)。

應用範例

[XmlArray]
public Item []Items
{
   get{return items;}
   set{items = value;}
}

XmlTextAttribute類

  當Xml檔案序列化或反序列化時使用該特性修飾的成員會作為XML文書處理。

應用範例

[System.Xml.Serialization.XmlTextAttribute()]
public string[] Text
{
    get
    {
        return this.textField;
    }
    set
    {
        this.textField = value;
    }
}

XmlIgnoreAttribute類

   指示該特性修飾的物件在Xml序列化時不會序列化該特性指定的元素。

應用範例

public class TeamGroup
{
 
   [XmlIgnore]
   public string Comment;
 
   public string GroupName;
}

用來控制XML序列化的屬性彙總

通過將下表中的特性應用於類和類成員,可以控制 XmlSerializer 序列化或反序列化該類的範例的方式。 若要了解這些屬性如何控制 XML 序列化,請參閱使用屬性控制 XML 序列化

特性適用物件指定
XmlAnyAttributeAttribute公共欄位、屬性、引數或返回 XmlAttribute 物件陣列的返回值。反序列化時,將會使用 XmlAttribute 物件填充陣列,而這些物件代表對於架構未知的所有 XML 特性。
XmlAnyElementAttribute公共欄位、屬性、引數或返回 XmlElement 物件陣列的返回值。反序列化時,將會使用 XmlElement 物件填充陣列,而這些物件代表對於架構未知的所有 XML 元素。
XmlArrayAttribute公共欄位、屬性、引數或返回複雜物件的陣列的返回值。陣列成員將作為 XML 陣列的成員生成。
XmlArrayItemAttribute公共欄位、屬性、引數或返回複雜物件的陣列的返回值。可以插入陣列的派生型別。 通常與 XmlArrayAttribute 一起應用。
XmlAttributeAttribute公共欄位、屬性、引數或返回值。成員將作為 XML 屬性進行序列化。
XmlChoiceIdentifierAttribute公共欄位、屬性、引數或返回值。可以使用列舉進一步消除成員的歧義。
XmlElementAttribute公共欄位、屬性、引數或返回值。欄位或屬性將作為 XML 元素進行序列化。
XmlEnumAttribute作為列舉識別符號的公共欄位。列舉元的元素名稱。
XmlIgnoreAttribute公共屬性和公共欄位。序列化包含類時,應該忽略屬性或欄位。
XmlIncludeAttribute公共派生類宣告,以及 Web 服務描述語言 (WSDL) 檔案的公共方法的返回值。生成要在序列化時識別的架構時,應該將該類包括在內。
XmlRootAttribute公共類宣告。控制視為 XML 根元素的屬性目標的 XML 序列化。 使用該屬性可進一步指定名稱空間和元素名稱。
XmlTextAttribute公共屬性和公共欄位。屬性或欄位應該作為 XML 文字進行序列化。
XmlTypeAttribute公共類宣告。XML 型別的名稱和名稱空間。

參考文章

C#: .net序列化及反序列化

用來控制XML序列化的屬性

使用屬性控制XML序列化

微軟官方檔案-XML相關類彙總

到此這篇關於.NET中XML序列化和反序列化常用類和屬性小結的文章就介紹到這了,更多相關.NET XML序列化和反序列化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com! 


IT145.com E-mail:sddin#qq.com