国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發 > 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 的區別分析,需要的朋友可以參考一下

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
天堂在线看视频| 国产精品美女视频免费观看软件 | 在线色视频网| 国产www视频在线观看| 伊人影院在线播放| 青青久草在线| 国产区av在线| 女子免费在线观看视频www| 久草网在线视频| 国产卡一卡二卡三| 综合蜜桃精品| 国产超碰在线| 2021av在线| 免费国产阿v视频在线观看| 免费高清av| 中文国产字幕在线观看| www在线视频观看| 日本视频在线观看一区二区三区| 美女网站在线观看| 国产黄在线播放| 黄色av免费看| 精品一区二区91| 国产在线高潮| eeuss影院在线观看| 国产视频三区| 国产美女免费观看| 碰草在线视频| 亚洲免费国产| 亚洲一区二区三区在线观看网站| 中文字幕不卡| www.香蕉视频在线观看| 午夜视频在线| jlzzjlzz欧美| 亚洲精品视频在线免费| 国产二级片在线| 国产青草视频在线观看视频| 国产在线观看18| 日本调教视频在线观看| 精品成人一区二区三区免费视频| 国产尤物视频| 开心婷婷激情| 青青草中文字幕| 久草.com| 成人福利视频导航| 国产无遮挡又黄又爽免费网站 | 在线免费国产| 国产精品麻豆一区二区三区 | 国产精品剧情一区二区在线观看| 国产美女在线一区二区三区| 国产免费网址| 天堂在线中文资源| 中文字幕中文字幕在线中高清免费版| 九九视频在线播放| 国产区在线视频| av丝袜在线| 免费a级人成a大片在线观看| 九九热在线视频| 激情五月色综合亚洲小说| 丁香视频五月| 2019年中文字幕| 四虎一区二区三区| 国产在线www| 国产二级片在线| 欧美日韩在线中文字幕| 国产乱视频在线观看播放| 中文字幕国产在线| 先锋影音av中文字幕| 超碰在线网站| 一区二区三区四区在线免费视频| 四虎成人免费观看在线网址| 日韩av成人| 日本天堂影院在线视频| 国产麻豆一级片| av大片在线| 国产天堂在线| 日本不卡视频一区二区| 国产视频福利在线| 久久综合第一页| 2021天堂中文幕一二区在线观| av影视在线看| 国产精品18久久久久网站| www.xxx黄| 尤物在线精品视频| 国产激情自拍视频| 99视频免费| 九九热在线观看视频| 国产不卡视频| 国产乱码在线| 免费看av大片| www.jizz在线观看| 性国产高清在线观看| 精品黄色免费中文电影在线播放| 中文字幕欧美日韩在线不卡| 超碰国产在线| 九九99精品| 成人精品一区二区三区免费| 九九热免费视频| 狠狠操天天操夜夜操| 开心丁香婷婷深爱五月| 人人澡人人爽| 成人欧美亚洲| 国产小视频免费在线网址| 国产中文在线视频| 九色福利视频| 天天操天天操天天色天天要| 最好看更新中文字幕| 国产精品一区牛牛影视| 国产在线一区二区视频| 99视频免费在线观看| 国产精品福利视频一区二区三区| 国产高清自拍视频在线观看| 在线视频福利| 热99re久久精品这里都是免费| 超碰97国产精品人人cao| 国产在线播放av| 国产三区视频在线观看| 国产高清av在线| 在线视频中文字幕| 免费观看久久久久| 国产一区二区在线|播放| 国产盗摄一区二区| 欧美日韩**字幕一区| 天天操夜夜操天天射| 国产黄色在线播放| 四虎成人欧美精品在永久在线| 免费看成年人视频在线观看| 久热精品免费视频| 国产三区视频在线观看| 中文字幕在线观看播放| 天天av天天爱| 在线观看av中文| 激情综合丁香| 午夜在线小视频| 伊人网在线观看| 最近免费中文字幕在线第一页 | 国产亚洲精品久久久网站好莱| 国产高清在线| 超碰免费在线| 伊人免费在线| 国产精品第八页| 国产中文在线| av网站大全在线| 国产一级粉嫩xxxx| 麻豆电影传媒二区| 99精品老司机免费视频| 国产一卡2卡3卡四卡网站 | baoyu777.永久免费视频| 中中文字幕av在线| 日本不卡视频一区二区| 91在线看片| 国产精品yjizz视频网一二区| 久久99亚洲网美利坚合众国| 亚洲精品视频在线免费| 国产激情视频在线观看| 国产一区二区影视| 超碰免费97在线观看| 2018中文字幕在线| 国产黄色网页| 国产成人亚洲欧美电影| 国产精品蜜臀| 97一区二区三区| 在线亚洲电影| 99re6在线视频精品免费| 精品视频在线一区二区| 精品国产二区三区| av手机免费在线观看| 午夜影院在线免费观看| 亚洲国产精品区| h网站免费在线观看| 免费在线播放av| 久热中文字幕精品视频在线| 欧美日韩在线中文字幕| 国产在线资源| 国产小视频在线高清播放| 国产精品久久精品牛牛影视| 精品全国在线一区二区| 亚洲日本伊人| 国产免费一级| 精品国产免费第一区二区| 日韩黄色成人| 国产麻豆一区二区三区精品| 国产经典自拍视频在线观看 | 性网站在线看| 久久精品蜜桃| 国产偷窥洗澡视频| 亚洲网站一区| 国产精品一区二区婷婷| 国产福利热线视频| 青青国产在线| 国产精品久久久久久久久鸭| 一级黄色av| 国产一卡2卡3卡免费网站| 在线视频三级| 国产视频中文字幕| 开心激情五月婷婷| 精品视频一二三| 国产麻豆精品入口在线观看| 91看片在线观看| 国产女人伦码一区二区三区不卡| 精品电影在线|