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

首頁 > 編程 > C# > 正文

C#中實現Json序列化與反序列化的幾種方式

2019-10-29 21:18:12
字體:
來源:轉載
供稿:網友

什么是JSON?

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write and easy for machines to parse and generate. JSON is a text format that is completely language independent.

翻譯:Json【javascript對象表示方法】,它是一個輕量級的數據交換格式,我們可以很簡單的來讀取和寫它,并且它很容易被計算機轉化和生成,它是完全獨立于語言的。

Json支持下面兩種數據結構:

  1. 鍵值對的集合--各種不同的編程語言,都支持這種數據結構;
  2. 有序的列表類型值的集合--這其中包含數組,集合,矢量,或者序列,等等。

Json有下面幾種表現形式

1.對象

一個沒有順序的“鍵/值”,一個對象以花括號“{”開始,并以花括號"}"結束,在每一個“鍵”的后面,有一個冒號,并且使用逗號來分隔多個鍵值對。

例如:

  var user = {"name":"Manas","gender":"Male","birthday":"1987-8-8"} 

 

2.數組

設置值的順序,一個數組以中括號"["開始,并以中括號"]"結束,并且所有的值使用逗號分隔

例如:

var userlist = [{"user":{"name":"Manas","gender":"Male","birthday":"1987-8-8"}}, {"user":{"name":"Mohapatra","Male":"Female","birthday":"1987-7-7"}}]

3.字符串

任意數量的Unicode字符,使用引號做標記,并使用反斜杠來分隔。

例如:

var userlist = "{/"ID/":1,/"Name/":/"Manas/",/"Address/":/"India/"}" 

好了,介紹完JSON,現在說正題。

序列化和反序列化有三種方式:

  1. 使用JavaScriptSerializer
  2. 使用DataContractJsonSerializer
  3. 使用JSON.NET類庫

我們先來看看使用 DataContractJsonSerializer的情況

DataContractJsonSerializer類幫助我們序列化和反序列化Json,他在程序集 System.Runtime.Serialization.dll下的System.Runtime.Serialization.Json命名空間里。

首先,這里,我新建一個控制臺的程序,新建一個類Student

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Runtime.Serialization;namespace JsonSerializerAndDeSerializer{ [DataContract] public class Student {  [DataMember]  public int ID { get; set; }  [DataMember]  public string Name { get; set; }  [DataMember]  public int Age { get; set; }  [DataMember]  public string Sex { get; set; } }}

注意:上面的Student實體中的契約 [DataMember],[DataContract],是使用DataContractJsonSerializer序列化和反序列化必須要加的,對于其他兩種方式不必加,也可以的。

我們程序的代碼:

要先引用程序集,在引入這個命名空間

//----------------------------------------------------------------------------------------------//使用DataContractJsonSerializer方式需要引入的命名空間,在System.Runtime.Serialization.dll.中using System.Runtime.Serialization.Json;//--------------------------------------------------------------------------------------------
#region 1.DataContractJsonSerializer方式序列化和反序列化   Student stu = new Student()    {     ID = 1,     Name = "曹操",     Sex = "男",     Age = 1000    };   //序列化   DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student));   MemoryStream msObj = new MemoryStream();   //將序列化之后的Json格式數據寫入流中   js.WriteObject(msObj, stu);   msObj.Position = 0;   //從0這個位置開始讀取流中的數據   StreamReader sr = new StreamReader(msObj, Encoding.UTF8);   string json = sr.ReadToEnd();   sr.Close();   msObj.Close();   Console.WriteLine(json);   //反序列化   string toDes = json;   //string to = "{/"ID/":/"1/",/"Name/":/"曹操/",/"Sex/":/"男/",/"Age/":/"1230/"}";   using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes)))   {    DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student));    Student model = (Student)deseralizer.ReadObject(ms);// //反序列化ReadObject    Console.WriteLine("ID=" + model.ID);    Console.WriteLine("Name=" + model.Name);    Console.WriteLine("Age=" + model.Age);    Console.WriteLine("Sex=" + model.Sex);   }   Console.ReadKey();    #endregion

運行之后結果是:

C#,json,反序列化,json序列化和反序列化,c,序列化

再看看使用JavaScriptJsonSerializer的情況:

JavaScriptSerializer is a class which helps to serialize and deserialize JSON. It is present in namespace System.Web.Script.Serialization which is available in assembly System.Web.Extensions.dll. To serialize a .Net object to JSON string use Serialize method. It's possible to deserialize JSON string to .Net object using Deserialize<T> or DeserializeObject methods. Let's see how to implement serialization and deserialization using JavaScriptSerializer.

這里要先引用

//-----------------------------------------------------------------------------------------//使用JavaScriptSerializer方式需要引入的命名空間,這個在程序集System.Web.Extensions.dll.中using System.Web.Script.Serialization;//----------------------------------------------------------------------------------------
#region 2.JavaScriptSerializer方式實現序列化和反序列化   Student stu = new Student()    {     ID = 1,     Name = "關羽",     Age = 2000,     Sex = "男"    };   JavaScriptSerializer js = new JavaScriptSerializer();   string jsonData = js.Serialize(stu);//序列化   Console.WriteLine(jsonData);   ////反序列化方式一:   string desJson = jsonData;   //Student model = js.Deserialize<Student>(desJson);// //反序列化   //string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);   //Console.WriteLine(message);   //Console.ReadKey();    ////反序列化方式2   dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化   string messageDy = string.Format("動態的反序列化,ID={0},Name={1},Age={2},Sex={3}",    modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//這里要使用索引取值,不能使用對象.屬性   Console.WriteLine(messageDy);   Console.ReadKey();    #endregion 

結果是:

 C#,json,反序列化,json序列化和反序列化,c,序列化

最后看看使用JSON.NET的情況,引入類庫:

C#,json,反序列化,json序列化和反序列化,c,序列化

下面的英文,看不懂可略過。。。

Json.NET is a third party library which helps conversion between JSON text and .NET object using the JsonSerializer. The JsonSerializer converts .NET objects into their JSON equivalent text and back again by mapping the .NET object property names to the JSON property names. It is open source software and free for commercial purposes.

The following are some awesome【極好的】 features,
Flexible JSON serializer for converting between .NET objects and JSON.
LINQ to JSON for manually reading and writing JSON.
High performance, faster than .NET's built-in【內嵌】 JSON serializers.
Easy to read JSON.
Convert JSON to and from XML.
Supports .NET 2, .NET 3.5, .NET 4, Silverlight and Windows Phone.
Let's start learning how to install and implement:

In Visual Studio, go to Tools Menu -> Choose Library Package Manger -> Package Manager Console. It opens a command window where we need to put the following command to install Newtonsoft.Json.

Install-Package Newtonsoft.Json
OR
In Visual Studio, Tools menu -> Manage Nuget Package Manger Solution and type “JSON.NET” to search it online. Here's the figure,

C#,json,反序列化,json序列化和反序列化,c,序列化

//使用Json.NET類庫需要引入的命名空間//-----------------------------------------------------------------------------using Newtonsoft.Json;//-------------------------------------------------------------------------
#region 3.Json.NET序列化   List<Student> lstStuModel = new List<Student>()    {      new Student(){ID=1,Name="張飛",Age=250,Sex="男"},   new Student(){ID=2,Name="潘金蓮",Age=300,Sex="女"}   };   //Json.NET序列化   string jsonData = JsonConvert.SerializeObject(lstStuModel);   Console.WriteLine(jsonData);   Console.ReadKey();   //Json.NET反序列化   string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";   Student descJsonStu = JsonConvert.DeserializeObject<Student>(json);//反序列化   Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));   Console.ReadKey();    #endregion

運行之后,結果是:

C#,json,反序列化,json序列化和反序列化,c,序列化

總結

最后還是盡量使用JSON.NET來序列化和反序列化,性能好。

In this article we discussed about how many ways we can implement serialization/deserialization in C#. However JSON.NET wins over other implementations because it facilitates more functionality of JSON validation, JSON schema, LINQ to JSON etc. So use JSON.NET always.

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品av| 川上优av一区二区线观看| 国产精品久久久久久久美男| 91精品视频在线播放| 欧美肥老妇视频| 欧美理论电影在线观看| 欧美日韩在线视频首页| 亚洲国产成人久久综合| 国产精品精品视频| 色香阁99久久精品久久久| 久久久久久久一区二区三区| 成人免费在线视频网站| 亚洲午夜未删减在线观看| 激情成人在线视频| 国产精品极品美女粉嫩高清在线| 欧美激情在线观看| 国产精品69av| 久久精品国产一区二区三区| 久久精品国产69国产精品亚洲| 欧美性极品少妇精品网站| 日韩男女性生活视频| 久久视频在线看| 欧美极品欧美精品欧美视频| 欧美电影在线观看网站| 91色精品视频在线| 亚洲最大的网站| 欧美裸身视频免费观看| 日韩av影视综合网| 一本色道久久综合狠狠躁篇的优点| 欧美日韩成人在线播放| 亚洲午夜精品视频| 久久久久久亚洲精品不卡| 亚洲夜晚福利在线观看| 久久精品一偷一偷国产| 亚洲国产美女精品久久久久∴| 久久精品99久久久久久久久| 久久青草福利网站| 欧美疯狂xxxx大交乱88av| 中文字幕成人精品久久不卡| 亚洲国产精品免费| 亚洲视频在线免费观看| 美女视频久久黄| 一本色道久久综合亚洲精品小说| 2019中文字幕全在线观看| 91精品久久久久久久久久另类| 国产精品久久久久久久一区探花| 高清视频欧美一级| 亚洲成在人线av| 欧美日韩精品在线播放| 亚洲欧洲在线播放| 亚洲影院污污.| 精品人伦一区二区三区蜜桃免费| 欧美激情视频免费观看| 久久久精品国产| 亚洲欧美激情一区| www.久久撸.com| 亚洲最大av网站| y97精品国产97久久久久久| 久久久久久亚洲精品不卡| 欧美在线中文字幕| 久久久这里只有精品视频| 日韩欧美在线一区| 日韩福利视频在线观看| 久久免费福利视频| 国产午夜精品美女视频明星a级| 777午夜精品福利在线观看| 亚洲成成品网站| 国内精品中文字幕| 国产视频在线一区二区| 色先锋资源久久综合5566| 91免费精品国偷自产在线| 中文字幕精品在线| 欧美日韩一区二区三区| 亚洲欧美福利视频| 亚洲欧美另类国产| 亚洲性生活视频在线观看| 国产精品成人久久久久| 77777亚洲午夜久久多人| 国产99久久久欧美黑人| 色吧影院999| 亚洲欧美国产精品| 麻豆乱码国产一区二区三区| 黄色精品一区二区| 欧美一性一乱一交一视频| 91av中文字幕| 欧美激情国产精品| 国产精品自拍偷拍视频| 国产精品久久久久久亚洲影视| 久久成年人视频| 欧美日韩成人在线观看| 久久久久久91| 亚洲第一福利网站| 久久在线免费观看视频| 亚洲男人的天堂在线播放| 亚洲精品色婷婷福利天堂| 欧洲永久精品大片ww免费漫画| 欧美激情亚洲一区| 欧美中文字幕在线观看| 国产精品久久久久久中文字| 久久资源免费视频| 久久久久久成人精品| 国产视频在线观看一区二区| 国产成人激情小视频| 成人免费视频在线观看超级碰| 久久99精品国产99久久6尤物| 国产精品第一视频| 97视频在线观看视频免费视频| 97视频在线观看播放| 欧洲中文字幕国产精品| 91香蕉嫩草影院入口| 久久久久女教师免费一区| 亚洲福利在线看| 中文字幕9999| 北条麻妃久久精品| 国产免费一区二区三区香蕉精| 国产午夜精品全部视频在线播放| 成人国产精品免费视频| 最新国产成人av网站网址麻豆| 国产日韩在线观看av| 国产一区二区久久精品| 欧美中文在线字幕| 久久精品久久精品亚洲人| 色悠久久久久综合先锋影音下载| 亚洲va久久久噜噜噜| 中文字幕亚洲欧美日韩高清| 在线精品视频视频中文字幕| 亚洲欧洲日韩国产| 国产ts一区二区| 日韩亚洲第一页| 国产精品亚洲精品| 91高清视频免费观看| 在线观看精品自拍私拍| 久久精品视频在线| 97香蕉久久超级碰碰高清版| 亚洲精品国偷自产在线99热| 欧美性xxxxxxx| 欧美成人免费全部观看天天性色| 色偷偷噜噜噜亚洲男人的天堂| 国产精品成人播放| 欧美在线视频在线播放完整版免费观看| 浅井舞香一区二区| 日韩精品欧美国产精品忘忧草| 欧美极度另类性三渗透| 在线电影av不卡网址| 亚洲人成电影在线| 色av吧综合网| 国产精品私拍pans大尺度在线| 欧美极品少妇全裸体| 日韩成人在线网站| 久久天天躁狠狠躁夜夜躁| 成人亚洲激情网| 亚洲第一区第二区| 亚洲最大的网站| 精品国产欧美一区二区三区成人| 亚洲乱码一区二区| 亚洲精品久久久久久久久久久久久| 亚洲人成网站在线播| 日韩美女在线看| 国产一区二区丝袜高跟鞋图片| 欧美午夜精品久久久久久浪潮| 美女啪啪无遮挡免费久久网站| 疯狂欧美牲乱大交777| 亚洲欧美在线免费| 日韩av影视在线|