c# XML和實體類之間相互轉換(序列化和反序列化)

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.IO;
using?System.Data;
using?System.Xml;
using?System.Xml.Serialization;
/// <summary>
/// Xml序列化與反序列化
/// </summary>
public?class?XmlUtil
{
????#region 反序列化
????/// <summary>
????/// 反序列化
????/// </summary>
????/// <param name="type">類型</param>
????/// <param name="xml">XML字符串</param>
????/// <returns></returns>
????public?static?object?Deserialize(Type type,?string?xml)
????{
????????try
????????{
????????????using?(StringReader sr =?new?StringReader(xml))
????????????{
????????????????XmlSerializer xmldes =?new?XmlSerializer(type);
????????????????return?xmldes.Deserialize(sr);
????????????}
????????}
????????catch?(Exception e)
????????{
????????????return?null;
????????}
????}
????/// <summary>
????/// 反序列化
????/// </summary>
????/// <param name="type"></param>
????/// <param name="xml"></param>
????/// <returns></returns>
????public?static?object?Deserialize(Type type, Stream stream)
????{
????????XmlSerializer xmldes =?new?XmlSerializer(type);
????????return?xmldes.Deserialize(stream);
????}
????#endregion
????#region 序列化
????/// <summary>
????/// 序列化
????/// </summary>
????/// <param name="type">類型</param>
????/// <param name="obj">對象</param>
????/// <returns></returns>
????public?static?string?Serializer(Type type,?object?obj)
????{
????????MemoryStream Stream =?new?MemoryStream();
????????XmlSerializer xml =?new?XmlSerializer(type);
????????try
????????{
????????????//序列化對象
????????????xml.Serialize(Stream, obj);
????????}
????????catch?(InvalidOperationException)
????????{
????????????throw;
????????}
????????Stream.Position = 0;
????????StreamReader sr =?new?StreamReader(Stream);
????????string?str = sr.ReadToEnd();
?????????
????????sr.Dispose();
????????Stream.Dispose();
????????return?str;
????}
????#endregion
}

下面是測試代碼:

?

1. 實體對象轉換到Xml

?

1
2
3
4
5
6
7
8
9
public?class?Student
{
????public?string?Name {?set;?get; }
????public?int?Age {?set;?get; }
}
Student stu1 =?new?Student() { Name =?"okbase", Age = 10 };
string?xml = XmlUtil.Serializer(typeof(Student), stu1);
Console.Write(xml);

2.?Xml轉換到實體對象

?

1
2
Student stu2 = XmlUtil.Deserialize(typeof(Student), xml)?as?Student;
Console.Write(string.Format("名字:{0},年齡:{1}", stu2.Name, stu2.Age));

3.?DataTable轉換到Xml

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 生成DataTable對象用于測試
DataTable dt1 =?new?DataTable("mytable");???// 必須指明DataTable名稱
dt1.Columns.Add("Dosage",?typeof(int));
dt1.Columns.Add("Drug",?typeof(string));
dt1.Columns.Add("Patient",?typeof(string));
dt1.Columns.Add("Date",?typeof(DateTime));
// 添加行
dt1.Rows.Add(25,?"Indocin",?"David", DateTime.Now);
dt1.Rows.Add(50,?"Enebrel",?"Sam", DateTime.Now);
dt1.Rows.Add(10,?"Hydralazine",?"Christoff", DateTime.Now);
dt1.Rows.Add(21,?"Combivent",?"Janet", DateTime.Now);
dt1.Rows.Add(100,?"Dilantin",?"Melanie", DateTime.Now);
// 序列化
xml = XmlUtil.Serializer(typeof(DataTable), dt1);
Console.Write(xml);

4.?Xml轉換到DataTable

?

1
2
3
4
5
6
7
8
9
10
11
12
13
// 反序列化
DataTable dt2 = XmlUtil.Deserialize(typeof(DataTable), xml)?as?DataTable;
// 輸出測試結果
foreach?(DataRow dr?in?dt2.Rows)
{
????foreach?(DataColumn col?in?dt2.Columns)
????{
????????Console.Write(dr[col].ToString() +?" ");
????}
????Console.Write("\r\n");
}

5.?List轉換到Xml

?

1
2
3
4
5
6
7
8
// 生成List對象用于測試
List<Student> list1 =?new?List<Student>(3);
list1.Add(new?Student() { Name =?"okbase", Age = 10 });
list1.Add(new?Student() { Name =?"csdn", Age = 15 });
// 序列化
xml = XmlUtil.Serializer(typeof(List<Student>), list1);
Console.Write(xml);

6.?Xml轉換到List

?

1
2
3
4
5
List<Student> list2 = XmlUtil.Deserialize(typeof(List<Student>), xml)?as?List<Student>;
foreach?(Student stu?in?list2)
{
????Console.WriteLine(stu.Name +?","?+ stu.Age.ToString());
}

轉載:http://blog.okbase.net/haobao/archive/62.html

本文轉自程序猿博客51CTO博客,原文鏈接http://blog.51cto.com/haihuiwei/1675868如需轉載請自行聯系原作者


365850153

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286424.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286424.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286424.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入探究MinimalApi是如何在Swagger中展示的

前言之前看到技術群里有同學討論說對于MinimalApi能接入到Swagger中感到很神奇,加上Swagger的數據本身是支持OpenApi2.0和OpenApi3.0使得swagger.json成為了許多接口文檔管理工具的標準數據源。ASP.NET Core能夠輕松快速的集成Swagger得益于微軟對OpenApi的大力支持&#xff0c…

語句的輸入、輸出

一、C#基礎 1、項目后綴&#xff1a; .config——配置文件&#xff08;存放配置參數文件&#xff09; .csproj——項目文件&#xff08;管理文件項&#xff09; .sln——解決方案文件&#xff08;管理項目&#xff09; .cs——源文件&#xff08;程序代碼&#xff09; 2、函數四…

Samba平臺搭建和用戶自行修改密碼環境搭建筆記

Samba 平臺搭建和用戶自行修改密碼環境搭建筆記系統&#xff1a;CentOS release 6.5 (Final)x86_64軟件: samba #服務端samba-client #客戶端samba-common #通用工具和庫Apache:httpdWeb: changepassword-0.9.tar.gz #需 GCC 編譯源碼包&#…

Android使用C/C++來保存密鑰

Android使用C/C來保存密鑰本文主要介紹如何通過native方法調用取出密鑰&#xff0c;以替代原本直接寫在Java中&#xff0c;或寫在gradle腳本中的不安全方式。為什么要這么做 如果需要在本地存儲一個密鑰串&#xff0c;典型的方式有 1. 直接寫在java source code中 2. 寫在gradl…

無代碼iVX編程實現簡單跳躍超級瑪麗游戲

首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后咱們選擇2D游戲類型制作一個簡單跳躍游戲&#xff1a; 接下來創建幾個圖片&#xff0c;并且添加物體&#xff0c;如圖所示&#xff1a; 在此需要更改對應稱重地面的阻尼值&#xff0c;讓其能夠緩慢降落…

【三維激光掃描】實驗01:環境搭建CAD2014+StonexSiScan軟件安裝

目 錄 一、CAD2014簡體中文版安裝1. 安裝過程2. 激活過程二、Si-Scan安裝1. 主程序安裝2. 驅動安裝一、CAD2014簡體中文版安裝 1. 安裝過程 雙擊安裝包:AutoCAD_2014_Simplified_Chinese_Win_64bit_dlm.sfx.exe,進行自解壓。 解壓完成后,如下圖所示,點擊【安裝】。 接受許…

C# 11 新特性:原始字符串

之前我們經常需要使用 string 類型定義字符串文本&#xff0c;字符串文本用一對雙引號括起來表示&#xff1a;var str "Hello MyIO";字符串可包含任何字符文本&#xff0c;但是有些字符需要轉義才能表示&#xff0c;比如雙引號要轉義成\"&#xff1a;var str …

File,FileInfo,Directory,DirectoryInfo

兩者的共同點&#xff1a; 一&#xff1a;都用于典型的操作&#xff0c;如復制、移動、重命名、創建、打開、刪除和追加到文件 二&#xff1a;默認情況下&#xff0c;將向所有用戶授予對新文件的完全讀/寫訪問權限。 兩者的區別&#xff1a; File類是靜態類&#xff0c;由…

C語言試題四之計算并輸出3到n之間所有素數的平方根之和

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

bzoj1011

因為允許5%的誤差。。所以把&#xff1e;一定長度的一段看成一段近似計算就行了。。 1 #include<cstdio>2 #include<cstdlib>3 #include<cstring>4 #include<ctime>5 #include<cmath>6 #include<iostream>7 #include<algorithm>8 #i…

一名全棧工程師的必備“百寶箱”

摘要&#xff1a;全棧工程師&#xff0c;也叫全端工程師&#xff0c;是指掌握多種技能&#xff0c;并能利用多種技能獨立完成產品的人。全棧工程師熟悉多種開發語言&#xff0c;同時具備前端和后臺開發能力&#xff0c;從需求分析&#xff0c;原型設計到產品開發&#xff0c;測…

為VMware虛擬主機添加新磁盤

軌跡: 關閉VMware虛擬主機 ---> 虛擬機 ---> 設置 ---> 硬件 ---> 硬盤 ---> 添加 ---> (彈出添加硬件向導)硬盤 ---> 磁盤類型 ---> 選擇磁盤 ---> 指定磁盤容量(最好選擇“將虛擬磁盤存儲為單個文件”) ---> 指定磁盤文件 ---> 點擊“完成…

【ArcGIS風暴】全站儀、RTK測量坐標數據在CASS和ArcGIS中展點的區別和聯系(帶數據)

ArcGIS展經緯度點完整教程:【ArcGIS風暴】ArcGIS 10.2導入Excel數據X、Y坐標(經緯度、平面坐標),生成Shapefile點數據圖層 目錄 1. CASS展點操作步驟2. ArcGIS展點操作步驟3. 案例數據下載RTK或全站儀地面實測的三維坐標數據文件一般包括點號,編碼,東坐標,北坐標,高程等…

php一篇文零基礎到制作在線圖片編輯網站賺錢(gif壓縮、九宮格裁剪、等比裁剪、大小變換)【php華為云實戰】

注意本篇文適用于&#xff1a; 零基礎小白想要了解一下php開發或者網站開發的同學&#xff08;但是注意&#xff0c;零基礎你可以通過本篇完成&#xff0c;但是由于是速成會有一些難度&#xff0c;本篇內容由于是速成&#xff0c;有一些額外知識點&#xff0c;不會可以來問我1…

Mustache.js使用筆記(內容屬于轉載總結)

1、Mustache的語法很簡單&#xff0c;用兩個大括號標記要綁定的字段即可&#xff0c;“{{}}” Mustache主要的渲染方法為Mustache.render()&#xff0c;該方法有兩個參數&#xff0c;第一個為要渲染的模版&#xff0c; 也就是例子中的template&#xff0c;第二個就是數據源也就…

MAUI 自定義繪圖入門

在2022的5月份&#xff0c;某軟正式發布了 MAUI 跨平臺 UI 框架。我本來想著趁六一兒童節放假來寫幾篇關于 MAUI 入門的博客&#xff0c;可惜發現我不擅長寫很入門的博客。再加上 MAUI 似乎是為了趕發布日期而發布&#xff0c;只能勉強說能開發了&#xff0c;能用了。于是我就來…

C語言試題五之計算并輸出給定數組(長度為9)中每相鄰兩個元素之平均值的平方根之和

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

【三維激光掃描】實驗02:StonexSiScan新建項目、加載點云數據

文章目錄 1. 新建工程2. 打開工程3. 加載點云1. 新建工程 打開StonexSiScan點云后處理軟件,點擊【新建】按鈕。 選擇工程存放路徑,輸入工程名稱。 2. 打開工程 點擊【打開】按鈕。

eBPF 在云原生環境中的應用

端午假期&#xff0c;我翻譯了 OReilly 的報告《什么是 eBPF》&#xff0c;其中我覺得第五章「云原生環境中的 eBPF」解答了我心中的很多疑惑&#xff0c;比較不錯&#xff0c;分享給大家。下面是第五章譯文。《什么是 eBPF》中文版封面近年來&#xff0c;云原生應用已呈指數級…