婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入分析XmlSerializer對象的Xml序列化與反序列化的示例詳解

深入分析XmlSerializer對象的Xml序列化與反序列化的示例詳解

熱門標簽:凱立德導航官網地圖標注 戶外地圖標注軟件手機哪個好用 五常地圖標注 鄭州400電話辦理 聯通 長春呼叫中心外呼系統哪家好 地圖標注和認領 萊蕪外呼電銷機器人價格 智能電話營銷外呼系統 電銷語音自動機器人
這篇隨筆對應的.Net命名空間是System.Xml.Serialization;文中的示例代碼需要引用這個命名空間。
為什么要做序列化和反序列化?
.Net程序執行時,對象都駐留在內存中;內存中的對象如果需要傳遞給其他系統使用;或者在關機時需要保存下來以便下次再次啟動程序使用就需要序列化和反序列化。
范圍:本文只介紹xml序列化,其實序列化可以是二進制的序列化,也可以是其他格式的序列化。
看一段最簡單的Xml序列化代碼
復制代碼 代碼如下:

class Program
{
    static void Main(string[] args)
    {
        int i = 10;
        //聲明Xml序列化對象實例serializer
        XmlSerializer serializer = new XmlSerializer(typeof(int));
        //執行序列化并將序列化結果輸出到控制臺
        serializer.Serialize(Console.Out, i);
        Console.Read();
    }
}

上面代碼對int i進行了序列化,并將序列化的結果輸出到了控制臺,輸出結果如下
復制代碼 代碼如下:

?xml version="1.0" encoding="gb2312"?>
int>10/int>

可以將上述序列化的xml進行反序列化,如下代碼
復制代碼 代碼如下:

static void Main(string[] args)
{
    using (StringReader rdr = new StringReader(@"?xml version=""1.0"" encoding=""gb2312""?>
int>10/int>"))
    {
        //聲明序列化對象實例serializer
        XmlSerializer serializer = new XmlSerializer(typeof(int));
        //反序列化,并將反序列化結果值賦給變量i
        int i = (int)serializer.Deserialize(rdr);
        //輸出反序列化結果
        Console.WriteLine("i = " + i);
        Console.Read();
    }
}

以上代碼用最簡單的方式說明了xml序列化和反序列化的過程,.Net系統類庫為我們做了大量的工作,序列化和反序列化都非常簡單。但是在現實中業務需求往往比較復雜,不可能只簡單的序列化一個int變量,顯示中我們需要對復雜類型進行可控制的序列化。
自定義對象的Xml序列化:
System.Xml.Serialization命名空間中有一系列的特性類,用來控制復雜類型序列化的控制。例如XmlElementAttribute、XmlAttributeAttribute、XmlArrayAttribute、XmlArrayItemAttribute、XmlRootAttribute等等。
看一個小例子,有一個自定義類Cat,Cat類有三個屬性分別為Color,Saying,Speed。
復制代碼 代碼如下:

namespace UseXmlSerialization
{
    class Program
    {
        static void Main(string[] args)
        {
            //聲明一個貓咪對象
            var c = new Cat { Color = "White", Speed = 10, Saying = "White or black,  so long as the cat can catch mice,  it is a good cat" };

            //序列化這個對象
            XmlSerializer serializer = new XmlSerializer(typeof(Cat));

            //將對象序列化輸出到控制臺
            serializer.Serialize(Console.Out, c);

            Console.Read();
        }
    }
    [XmlRoot("cat")]
    public class Cat
    {
        //定義Color屬性的序列化為cat節點的屬性
        [XmlAttribute("color")]
        public string Color { get; set; }

        //要求不序列化Speed屬性
        [XmlIgnore]
        public int Speed { get; set; }

        //設置Saying屬性序列化為Xml子元素
        [XmlElement("saying")]
        public string Saying { get; set; }
    }
}

可以使用XmlElement指定屬性序列化為子節點(默認情況會序列化為子節點);或者使用XmlAttribute特性制定屬性序列化為Xml節點的屬性;還可以通過XmlIgnore特性修飾要求序列化程序不序列化修飾屬性。
對象數組的Xml序列化:
數組的Xml序列化需要使用XmlArrayAttribute和XmlArrayItemAttribute;XmlArrayAttribute指定數組元素的Xml節點名,XmlArrayItemAttribute指定數組元素的Xml節點名。
如下代碼示例:
復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace UseXmlSerialization
{
    class Program
    {
        static void Main(string[] args)
        {
            //聲明一個貓咪對象
            var cWhite = new Cat { Color = "White", Speed = 10, Saying = "White or black,  so long as the cat can catch mice,  it is a good cat" };
            var cBlack = new Cat { Color = "Black", Speed = 10, Saying = "White or black,  so long as the cat can catch mice,  it is a good cat" };

            CatCollection cc = new CatCollection { Cats = new Cat[] { cWhite,cBlack} };

            //序列化這個對象
            XmlSerializer serializer = new XmlSerializer(typeof(CatCollection));

            //將對象序列化輸出到控制臺
            serializer.Serialize(Console.Out, cc);

            Console.Read();
        }
    }
    [XmlRoot("cats")]
    public class CatCollection
    {
        [XmlArray("items"),XmlArrayItem("item")]
        public Cat[] Cats { get; set; }
    }

    [XmlRoot("cat")]
    public class Cat
    {
        //定義Color屬性的序列化為cat節點的屬性
        [XmlAttribute("color")]
        public string Color { get; set; }

        //要求不序列化Speed屬性
        [XmlIgnore]
        public int Speed { get; set; }

        //設置Saying屬性序列化為Xml子元素
        [XmlElement("saying")]
        public string Saying { get; set; }
    }
}

以上代碼將輸出:
復制代碼 代碼如下:

?xml version="1.0" encoding="gb2312"?>
cats xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://ww
w.w3.org/2001/XMLSchema">
  items>
    item color="White">
      saying>White or black,  so long as the cat can catch mice,  it is a good
cat/saying>
    /item>
    item color="Black">
      saying>White or black,  so long as the cat can catch mice,  it is a good
cat/saying>
    /item>
  /items>
/cats>

XmlSerializer內存泄漏問題:
仔細看了下msdn,確實存在泄漏的情況,msdn說明如下:
動態生成的程序集
為了提高性能,XML 序列化基礎結構將動態生成程序集,以序列化和反序列化指定類型。此基礎結構將查找并重復使用這些程序集。此行為僅在使用以下構造函數時發生:
XmlSerializer(Type)
XmlSerializer.XmlSerializer(Type, String)
如果使用任何其他構造函數,則會生成同一程序集的多個版本,且絕不會被卸載,這將導致內存泄漏和性能降低。最簡單的解決方案是使用先前提到的兩個構造函數的其中一個。否則,必須在 Hashtable 中緩存程序集,如以下示例中所示。
也就是說我們在使用XmlSerializer序列化,初始化XmlSerializer對象時最好使用下面兩個構造函數否則會引起內存泄漏。
XmlSerializer(Type)
XmlSerializer.XmlSerializer(Type, String)

標簽:衢州 福州 西藏 紅河 宣城 岳陽 湖州 西寧

巨人網絡通訊聲明:本文標題《深入分析XmlSerializer對象的Xml序列化與反序列化的示例詳解》,本文關鍵詞  深入分析,XmlSerializer,對象,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入分析XmlSerializer對象的Xml序列化與反序列化的示例詳解》相關的同類信息!
  • 本頁收集關于深入分析XmlSerializer對象的Xml序列化與反序列化的示例詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    成人在线视频一区二区| 一区二区三区日本| 91精品国产欧美一区二区| caoporm超碰国产精品| 高清beeg欧美| 成人免费毛片嘿嘿连载视频| 成人av一区二区三区| 成人网男人的天堂| 成人一区二区视频| 91蜜桃视频在线| 欧美老肥妇做.爰bbww视频| 亚洲午夜久久久久久久久久久| 国产日韩欧美激情| 国产精品视频一二三| 日韩美女视频一区二区| 综合分类小说区另类春色亚洲小说欧美 | 日韩欧美一区二区在线视频| 欧美一区二区视频观看视频| 欧美va亚洲va在线观看蝴蝶网| 狠狠久久亚洲欧美| 亚洲激情图片一区| 欧美一区二区播放| 欧美xxx久久| 中日韩av电影| 午夜欧美在线一二页| 欧美国产日韩亚洲一区| 精品区一区二区| 久久视频一区二区| 亚洲色图另类专区| 日本va欧美va瓶| av不卡一区二区三区| 欧美日韩午夜影院| 欧美激情一区二区在线| 亚洲一区二区综合| 国产伦精品一区二区三区免费| 91免费版pro下载短视频| 欧美精品一卡二卡| 中文字幕亚洲精品在线观看| 免费看欧美美女黄的网站| 99精品偷自拍| 精品久久久久一区二区国产| 亚洲女与黑人做爰| 国产精一区二区三区| 8x福利精品第一导航| 亚洲欧美视频在线观看视频| 国产做a爰片久久毛片| 欧美日韩国产大片| 亚洲色欲色欲www| 国产精品影视网| 日韩免费一区二区| 亚洲福利一区二区三区| 99在线视频精品| 欧美日韩久久久| 亚洲欧美日韩国产一区二区三区| 日韩综合一区二区| 欧洲精品视频在线观看| 国产欧美日韩一区二区三区在线观看| 日韩和欧美一区二区| 欧美亚洲丝袜传媒另类| 亚洲女爱视频在线| 9i看片成人免费高清| 欧美国产日韩亚洲一区| 国产成人在线观看免费网站| 欧美美女网站色| 香蕉久久一区二区不卡无毒影院 | 色综合久久99| 亚洲国产精品国自产拍av| 国产在线精品免费| 欧美精品一区视频| 国产综合一区二区| 国产日韩欧美一区二区三区综合| 91视频免费看| 欧美日本精品一区二区三区| 亚洲男帅同性gay1069| 91蜜桃网址入口| 亚洲一区二区三区在线| 在线观看国产精品网站| 亚洲一区欧美一区| 欧美日韩国产另类一区| 青青国产91久久久久久| 日韩三级伦理片妻子的秘密按摩| 精品在线一区二区三区| 久久午夜色播影院免费高清| 国产成人av资源| 国产精品视频线看| 在线精品视频一区二区三四| 日韩国产精品久久久| 日韩午夜三级在线| 国产成人午夜精品影院观看视频| 国产精品久久久久久一区二区三区 | 国产精品久久99| 97精品久久久午夜一区二区三区| 亚洲欧洲精品一区二区三区 | 欧美精品一级二级三级| 日本免费新一区视频| 国产天堂亚洲国产碰碰| 色婷婷综合久久久中文一区二区| 亚洲成精国产精品女| 91网站视频在线观看| 久久久夜色精品亚洲| 成人午夜av电影| 亚洲永久免费视频| 精品日韩欧美在线| 色婷婷一区二区| 日本午夜精品一区二区三区电影| 久久婷婷久久一区二区三区| 欧美在线综合视频| 国内精品伊人久久久久影院对白| 综合欧美亚洲日本| 欧美本精品男人aⅴ天堂| 色8久久精品久久久久久蜜| 青青青伊人色综合久久| 亚洲乱码国产乱码精品精可以看| 欧美一区二区三区视频| av中文字幕在线不卡| 免费成人你懂的| 亚洲欧美一区二区三区国产精品| 亚洲精品在线网站| 欧美男男青年gay1069videost | 3atv一区二区三区| 激情综合网激情| 亚洲黄色av一区| 久久久精品国产99久久精品芒果| 欧美三级日韩三级| 91在线无精精品入口| 国产一区二区毛片| 免费美女久久99| 亚洲福利电影网| 亚洲女厕所小便bbb| 国产精品国产三级国产普通话三级 | 免费精品视频在线| 一区二区三区91| 中文字幕色av一区二区三区| 亚洲精品一区二区三区香蕉| 日本一区二区三区在线不卡| 欧美亚洲动漫精品| 91偷拍与自偷拍精品| 国产成人高清在线| 国产精品系列在线播放| 精品亚洲porn| 久久99国产精品久久99果冻传媒| 亚洲观看高清完整版在线观看| 中文字幕综合网| 综合亚洲深深色噜噜狠狠网站| 国产精品你懂的在线欣赏| 国产欧美日韩三区| 欧美激情一区不卡| 国产精品美女一区二区三区| 中文在线免费一区三区高中清不卡| 国产亚洲精品资源在线26u| 久久综合九色综合久久久精品综合| 精品裸体舞一区二区三区| 欧美精品一区二区三区高清aⅴ| 欧美mv日韩mv国产网站app| 精品久久久久久久久久久久包黑料 | 日韩欧美的一区二区| 日本视频中文字幕一区二区三区| 亚洲午夜羞羞片| 亚洲第一福利视频在线| 亚洲18影院在线观看| 石原莉奈在线亚洲二区| 日韩影院免费视频| 久久99九九99精品| 国产精品91xxx| av在线不卡免费看| 在线观看不卡视频| 5月丁香婷婷综合| 欧美一卡二卡三卡四卡| 久久先锋资源网| 亚洲欧洲国产日本综合| 夜夜嗨av一区二区三区四季av | 日韩欧美国产系列| 久久新电视剧免费观看| 日韩理论片在线| 秋霞国产午夜精品免费视频| 国产在线精品一区二区夜色 | 一区二区理论电影在线观看| 天天色综合成人网| 国产精品一级在线| 色综合久久综合网| 欧美成人性战久久| 亚洲另类中文字| 狠狠色伊人亚洲综合成人| 91老师国产黑色丝袜在线| 欧美精品成人一区二区三区四区| 国产日韩亚洲欧美综合| 亚洲va国产va欧美va观看| 懂色一区二区三区免费观看| 欧美午夜不卡视频| 国产日韩精品一区二区浪潮av| 亚洲色欲色欲www在线观看| 男女激情视频一区| 欧美综合久久久| 国产精品久久久久久久久动漫 | 亚洲一区二区三区中文字幕| 精品一区二区免费在线观看| 欧洲亚洲精品在线| 国产精品久久久久久一区二区三区 | 欧美精品99久久久**| 国产精品国产三级国产普通话99|