亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > XML > 正文

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

2024-09-05 20:55:10
字體:
來源:轉載
供稿:網友

推薦:解析linq to xml操作XML的示例分析
本篇文章是對linq to xml操作XML的示例進行了詳細的分析介紹,需要的朋友參考下

這篇隨筆對應的.Net命名空間是System.Xml.Serialization;文中的示例代碼需要引用這個命名空間。
為什么要做序列化和反序列化?
.Net程序執行時,對象都駐留在內存中;內存中的對象如果需要傳遞給其他系統使用;或者在關機時需要保存下來以便下次再次啟動程序使用就需要序列化和反序列化。
范圍:本文只介紹xml序列化,其實序列化可以是二進制的序列化,也可以是其他格式的序列化。
看一段最簡單的Xml序列化代碼
復制代碼 代碼如下:www.CuoXIn.com

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進行了序列化,并將序列化的結果輸出到了控制臺,輸出結果如下
復制代碼 代碼如下:www.CuoXIn.com

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

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

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。
復制代碼 代碼如下:www.CuoXIn.com

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節點名。
如下代碼示例:
復制代碼 代碼如下:www.CuoXIn.com

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; }
}
}

以上代碼將輸出:
復制代碼 代碼如下:www.CuoXIn.com

<?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)

分享:Web.config 和 App.config 的區別分析
Web.config 和 App.config 的區別分析,需要的朋友可以參考一下

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品久久久| 精品二区三区线观看| 亚洲天堂色网站| 91精品久久久久久久久久久久久| 中文字幕日韩高清| 欧日韩不卡在线视频| 亚洲激情视频在线播放| 久久久久久久国产精品| 亚洲成人在线网| 亚洲女成人图区| 色综合色综合久久综合频道88| 国产精品偷伦视频免费观看国产| 黄色精品在线看| 伊人久久久久久久久久| 中文国产亚洲喷潮| 久久国产精品电影| 亚洲天堂av电影| 国内揄拍国内精品| 91免费欧美精品| 欧美影院久久久| 日韩美女写真福利在线观看| 亚洲www在线| 91av在线播放| 久久最新资源网| 日韩av成人在线| 日韩中文理论片| 国产在线拍偷自揄拍精品| 精品欧美激情精品一区| 亚洲人成在线播放| 亚洲a中文字幕| 97精品一区二区视频在线观看| 亚洲欧洲美洲在线综合| 国产香蕉97碰碰久久人人| 91亚洲国产精品| 狠狠躁夜夜躁人人爽天天天天97| 亚洲成人免费在线视频| 国产精品国产三级国产aⅴ浪潮| 日本欧美中文字幕| 日韩亚洲第一页| 亚洲综合在线中文字幕| 日韩在线视频观看正片免费网站| 亚洲图片在区色| 正在播放欧美一区| 91精品久久久久久久久不口人| 国产手机视频精品| 欧美日在线观看| 国产成人精品综合久久久| 亚洲性69xxxbbb| 尤物九九久久国产精品的特点| 黄色一区二区三区| 伊人久久久久久久久久久久久| 91美女片黄在线观看游戏| 亚洲视频在线免费看| 国产精品中文在线| 亚洲男人第一av网站| 亚洲最新av在线网站| 日韩中文娱乐网| 日本午夜精品理论片a级appf发布| 国内精品久久久久久中文字幕| 亚洲国产美女久久久久| 精品久久香蕉国产线看观看gif| 国产成人精品电影久久久| 午夜精品福利在线观看| 成人有码视频在线播放| 91免费欧美精品| 欧美日韩亚洲高清| 日韩国产欧美精品一区二区三区| 青青草原一区二区| 国产精品黄页免费高清在线观看| 精品无码久久久久久国产| 久久久欧美一区二区| 国产精品视频yy9099| 最近日韩中文字幕中文| 亚洲国产91精品在线观看| 亚洲午夜未删减在线观看| 亚洲人成电影在线观看天堂色| 亚洲美女久久久| 97视频在线看| 欧美午夜久久久| 国产成人精品一区二区在线| 欧美日韩精品国产| 欧美日韩在线视频一区二区| 色综合久久中文字幕综合网小说| 日日摸夜夜添一区| 日韩av在线网站| 日韩av电影在线播放| 中文字幕av一区二区| 97视频在线观看网址| 亚洲一区制服诱惑| 岛国视频午夜一区免费在线观看| 亚洲精品久久久久久久久久久| 91精品久久久久久久久久久久久| 久久精品中文字幕一区| 18性欧美xxxⅹ性满足| 欧美黑人又粗大| 亚洲黄色成人网| 日韩激情视频在线播放| 久久久久久久久久久91| 亚洲大尺度美女在线| 色婷婷综合久久久久中文字幕1| 亚洲性线免费观看视频成熟| 国产一区二区在线免费视频| 国产综合色香蕉精品| 日韩国产欧美区| 国产在线a不卡| 国产精品久久中文| 538国产精品视频一区二区| 国产精品色午夜在线观看| 欧美激情高清视频| 国产亚洲精品美女久久久久| 日韩最新中文字幕电影免费看| 欧美在线一级视频| 另类天堂视频在线观看| 欧美激情精品久久久久久免费印度| 国产在线视频一区| 亚洲人成毛片在线播放| 欧美激情精品久久久久久免费印度| 久久久久一本一区二区青青蜜月| 国产精品成人国产乱一区| 亚洲视频在线观看视频| 亚洲人精品午夜在线观看| 中文字幕国产精品久久| 精品国产自在精品国产浪潮| 国产精品黄页免费高清在线观看| 亚洲第一男人天堂| 日韩精品亚洲精品| 欧美日韩一区二区精品| 久久精品影视伊人网| 91嫩草在线视频| 91成人免费观看网站| 亚洲综合视频1区| 国产精品丝袜高跟| 中文字幕少妇一区二区三区| 色琪琪综合男人的天堂aⅴ视频| 色婷婷亚洲mv天堂mv在影片| 精品亚洲一区二区三区四区五区| 国产精品一区二区三| 亚洲精品动漫100p| 国产精品一区二区三区毛片淫片| 欧美肥婆姓交大片| 青草热久免费精品视频| 国产97在线|日韩| 久久久亚洲福利精品午夜| 亚洲成av人片在线观看香蕉| 国产在线拍揄自揄视频不卡99| 精品国产一区二区三区久久狼黑人| 国产一区二区美女视频| 黑人巨大精品欧美一区免费视频| 91免费电影网站| 亚洲精品有码在线| 欧洲亚洲女同hd| 欧美制服第一页| 久久久久久久一| 亚洲乱码av中文一区二区| 色综合伊人色综合网| 狠狠躁夜夜躁人人躁婷婷91| 国产91免费观看| 亚洲国产99精品国自产| 91在线视频一区| 久久99久久99精品免观看粉嫩| 亚洲第一免费播放区| 欧美精品电影免费在线观看| 日韩精品极品在线观看播放免费视频| 亚洲国产精久久久久久久|