最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 使用Json.NET實(shí)現(xiàn)json序列化

 更新時(shí)間:2021年05月12日 08:53:13   作者:time-flies  
這篇文章主要介紹了詳解C#中的JSON序列化方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下

序列化(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)

    C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了C#環(huán)形緩沖區(qū)(隊(duì)列)完全實(shí)現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#條碼生成及打印實(shí)例代碼

    C#條碼生成及打印實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了C#條碼生成及打印實(shí)例代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • c#刪除數(shù)組中符合條件的元素(正確寫法)

    c#刪除數(shù)組中符合條件的元素(正確寫法)

    這篇文章主要介紹了c#刪除數(shù)組中符合條件的元素,分別給大家展示了錯(cuò)誤寫法和正確寫法,補(bǔ)充介紹了從C#的數(shù)組中刪除指定元素的幾種方法,需要的朋友可以參考下
    2023-10-10
  • C#中將UTC時(shí)間轉(zhuǎn)換為JST時(shí)間的實(shí)現(xiàn)方法

    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”不支持它或者因配置不正確而無法支持它

    協(xié)定需要會(huì)話,但是綁定“BasicHttpBinding”不支持它或者因配置不正確而無法支持它

    在IIS7及以上版本服務(wù)器中提供了基于WAS的無.SVC文件的WCF服務(wù)激活功能,能夠提供基于HTTP和非HTTP協(xié)議的訪問,通過添加Windows Server AppFabric可以更方便的管理WCF服務(wù)
    2012-12-12
  • C#編寫控制臺(tái)程序紙牌游戲

    C#編寫控制臺(tái)程序紙牌游戲

    這篇文章主要為大家詳細(xì)介紹了C#編寫控制臺(tái)程序紙牌游戲,適合C#初學(xué)者,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 微信小程序支付C#后端源碼

    微信小程序支付C#后端源碼

    這篇文章主要為大家詳細(xì)介紹了微信小程序支付C#后端源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C#連接MySQL數(shù)據(jù)庫的方法步驟

    C#連接MySQL數(shù)據(jù)庫的方法步驟

    最近兩天在解決C#連接MySql數(shù)據(jù)庫的問題,通過不同的從網(wǎng)上學(xué)習(xí),最終找到了解決的辦法,下面這篇文章主要給大家介紹了關(guān)于C#連接MySQL數(shù)據(jù)庫的方法步驟,需要的朋友可以參考下
    2023-01-01
  • 關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(一)

    關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(一)

    其實(shí)說白了,反射就是能知道我們未知類型的類型信息這么一個(gè)東西.沒什么神秘可講!反射的核心是System.Type。System.Type包含了很多屬性和方法,使用這些屬性和方法可以在運(yùn)行時(shí)得到類型信息
    2013-07-07
  • C#搜索文字在文件及文件夾中出現(xiàn)位置的方法

    C#搜索文字在文件及文件夾中出現(xiàn)位置的方法

    這篇文章主要介紹了C#搜索文字在文件及文件夾中出現(xiàn)位置的方法,涉及C#針對(duì)文件及文件夾遍歷與查找的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08

最新評(píng)論

光山县| 南涧| 张家川| 新疆| 滨海县| 双桥区| 邵东县| 通城县| 兴海县| 新巴尔虎左旗| 进贤县| 呈贡县| 衢州市| 淮阳县| 韶关市| 长沙市| 石首市| 兴义市| 佛山市| 北宁市| 宜章县| 柳州市| 林芝县| 体育| 中西区| 新龙县| 芮城县| 临邑县| 莒南县| 沂源县| 民丰县| 扎囊县| 凌海市| 滨州市| 于田县| 临沧市| 桃江县| 武冈市| 布尔津县| 巴林右旗| 福贡县|