c# 使用Json.NET實(shí)現(xiàn)json序列化
序列化(Serialize)是將對(duì)象轉(zhuǎn)換成字節(jié)流,并將其用于存儲(chǔ)或傳輸?shù)倪^程,主要用途是保存對(duì)象的狀態(tài),以便在需要時(shí)重新創(chuàng)建該對(duì)象;反序列化(Deserialize)則是將上面的字節(jié)流轉(zhuǎn)換為相應(yīng)對(duì)象的過程;在C#中的使用JSON序列化及反序列化時(shí),推薦使用Json.NET——NET的流行高性能JSON框架,當(dāng)然也可以使用.NET自帶的 System.Text.Json(.NET5)、DataContractJsonSerializer、JavaScriptSerializer(不推薦)。
下面是Json.NET、DataContractJsonSerializer、JavaScriptSerializer的性能對(duì)比(來自Json.NET官網(wǎng)):

Json.NET的擴(kuò)展方法類如下(需引用Newtonsoft.Json命名空間):
using Newtonsoft.Json;
/// <summary>
/// Newtonsoft.Json的擴(kuò)展方法類
/// </summary>
public static class NewtonsoftJsonExtension
{
/// <summary>
/// 將Json字符串反序列化為對(duì)象實(shí)例——Newtonsoft.Json
/// </summary>
/// <typeparam name="T">對(duì)象類型</typeparam>
/// <param name="jsonString">Json字符串</param>
/// <returns>對(duì)象實(shí)例</returns>
public static T DeserializeObjectFromJson_NJ<T>(this string jsonString)
{
return JsonConvert.DeserializeObject<T>(jsonString);
}
/// <summary>
/// 將對(duì)象實(shí)例序列化為Json字符串——Newtonsoft.Json
/// </summary>
/// <typeparam name="T">對(duì)象類型</typeparam>
/// <param name="obj">對(duì)象實(shí)例</param>
/// <returns>Json字符串</returns>
public static string SerializeObjectToJson_NJ<T>(this T obj)
{
return JsonConvert.SerializeObject(obj);
}
}
DataContractJsonSerializer的擴(kuò)展方法類如下(需引用System.Runtime.Serialization.Json命名空間):
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;
/// <summary>
/// System.Runtime.Serialization.Json擴(kuò)展方法類([DataContract]和[DataMember]聯(lián)合使用來標(biāo)記被序列化的字段)
/// </summary>
public static class SerializationJsonExtension
{
private static Dictionary<Type, DataContractJsonSerializer> serDic = new Dictionary<Type, DataContractJsonSerializer>();
private static DataContractJsonSerializer GetSerializer(Type type)
{
if (!serDic.ContainsKey(type))
{
serDic.Add(type, new DataContractJsonSerializer(type));
}
return serDic[type];
}
/// <summary>
/// 將Json字符串反序列化為對(duì)象實(shí)例——System.Runtime.Serialization.Json([DataContract]和[DataMember]聯(lián)合使用來標(biāo)記被序列化的字段)
/// </summary>
/// <typeparam name="T">對(duì)象類型</typeparam>
/// <param name="jsonString">Json字符串</param>
/// <returns>對(duì)象實(shí)例</returns>
public static T DeserializeObjectFromJson_SJ<T>(this string jsonString)
{
var ser = GetSerializer(typeof(T));
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
}
}
/// <summary>
/// 將對(duì)象實(shí)例序列化為Json字符串——System.Runtime.Serialization.Json([DataContract]和[DataMember]聯(lián)合使用來標(biāo)記被序列化的字段)
/// </summary>
/// <typeparam name="T">對(duì)象類型</typeparam>
/// <param name="obj">對(duì)象實(shí)例</param>
/// <returns>Json字符串</returns>
public static string SerializeObjectToJson_SJ<T>(this T obj)
{
var ser = GetSerializer(typeof(T));
using (var ms = new MemoryStream())
{
ser.WriteObject(ms, obj);
ms.Position = 0;
using (var sr = new StreamReader(ms, Encoding.UTF8))
{
return sr.ReadToEnd();
}
}
}
}
以上就是詳解C#中的JSON序列化方法的詳細(xì)內(nèi)容,更多關(guān)于c# JSON序列化方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下2016-07-07
C#中將UTC時(shí)間轉(zhuǎn)換為JST時(shí)間的實(shí)現(xiàn)方法
在C#中,將UTC時(shí)間轉(zhuǎn)換為JST(日本標(biāo)準(zhǔn)時(shí)間,即UTC+9)時(shí)間可以通過使用 DateTime 和 TimeZoneInfo 類來實(shí)現(xiàn),JST比UTC快9小時(shí),因此可以直接進(jìn)行轉(zhuǎn)換,本文將通過代碼示例給大家介紹C#中將UTC時(shí)間轉(zhuǎn)換為JST時(shí)間,需要的朋友可以參考下2025-01-01
協(xié)定需要會(huì)話,但是綁定“BasicHttpBinding”不支持它或者因配置不正確而無法支持它
在IIS7及以上版本服務(wù)器中提供了基于WAS的無.SVC文件的WCF服務(wù)激活功能,能夠提供基于HTTP和非HTTP協(xié)議的訪問,通過添加Windows Server AppFabric可以更方便的管理WCF服務(wù)2012-12-12
關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(一)
其實(shí)說白了,反射就是能知道我們未知類型的類型信息這么一個(gè)東西.沒什么神秘可講!反射的核心是System.Type。System.Type包含了很多屬性和方法,使用這些屬性和方法可以在運(yùn)行時(shí)得到類型信息2013-07-07

