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

C#純技術(shù)之Class寫入Json

 更新時(shí)間:2023年01月25日 16:18:47   作者:鯲居  
這篇文章主要介紹了C#純技術(shù)之Class寫入Json問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C# Class寫入Json

   /// <summary>
        /// 寫入json文件
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="savePath"></param>
        public static void ConvertToJson(object obj, string savePath)
        {
            string str = JsonConvert.SerializeObject(obj);
 
            //json格式化
            JsonSerializer jsonSerializer = new JsonSerializer();
            TextReader textReader = new StringReader(str);
            JsonTextReader jsonTextReader = new JsonTextReader(textReader);
            object _object = jsonSerializer.Deserialize(jsonTextReader);
            if (_object != null)
            {
                StringWriter stringWriter = new StringWriter();
                JsonTextWriter jsonWriter = new JsonTextWriter(stringWriter)
                {
                    Formatting = Formatting.Indented,
                    Indentation = 4,
                    IndentChar = ' '
                };
                jsonSerializer.Serialize(jsonWriter, _object);
                File.WriteAllText(savePath, stringWriter.ToString());
            }
        }

自定義的類不斷迭代,然后通過json樹模型寫入json文件,這樣得到的數(shù)據(jù)不僅輕量而且易讀,是數(shù)據(jù)傳輸?shù)膬?yōu)秀方式。

json和xml比較 筆者更喜歡xml

C# 操作JSON幾種方式

通過兩種在c#中常用的方式來實(shí)現(xiàn)對Json數(shù)據(jù)的序列化和反序列化,為了實(shí)現(xiàn)大多數(shù)的需求,我們采用稍微復(fù)雜一點(diǎn)的數(shù)據(jù)模型。

首先我們有以下json數(shù)據(jù)

{
? "name": "張三",
? "age": 20,
? "idCard": "123456789",
? "birthday": "2021-01-01 00:00:00",
? "hobbys": [
? ? {
? ? ? "sort": 1,
? ? ? "desc": "寫字"
? ? },
? ? {
? ? ? "sort": 2,
? ? ? "desc": "游泳"
? ? }
? ]
}

然后我們根據(jù)json的結(jié)構(gòu)創(chuàng)建一個(gè)實(shí)體類

private class Studet
{
? ? public string name { get; set; }
? ? public int age { get; set; }
? ? public string idCard { get; set; }
? ? public DateTime birthday { get; set; }
? ? public List<hobby> hobbys { get; set; }
}
private class hobby
{
? ? public int sort { get; set; }
? ? public string desc { get; set; }
}

第一種方式:JavaScriptSerializer

//需添加引用:System.Web.Extensions
//需導(dǎo)入命名空間:using System.Web.Script.Serialization;
?
?
//json.txt中的數(shù)據(jù)為上面的json數(shù)據(jù)
string json = File.ReadAllText("d:\\json.txt");
?
?
JavaScriptSerializer jss = new JavaScriptSerializer();
//反序列化成Studet對象
Studet student = jss.Deserialize<Studet>(json);
//然后就可以直接用操作對象的方法直接點(diǎn)出來就行
//輸出:張三
Console.WriteLine(student.name);
?
?
//同樣的,我們可以將上面的對象序列化成一個(gè)json數(shù)據(jù)
//序列化成json
string resultJson = jss.Serialize(student);
Console.WriteLine(resultJson);

第二種方式:JSON.NET

//需添加引用:Newtonsoft.Json
//需導(dǎo)入命名空間:using Newtonsoft.Json; using Newtonsoft.Json.Linq;
?
?
?//反序列化成對象
Studet student = JsonConvert.DeserializeObject<Studet>(json);
//輸出:張三
Console.WriteLine(student.name);
?
?
//序列化成json
string resultJson = JsonConvert.SerializeObject(student);
Console.WriteLine(resultJson);

以上是我們通過json結(jié)構(gòu)映射實(shí)體類的方式去實(shí)現(xiàn)的解析json數(shù)據(jù),很多時(shí)候我們可能并不需要,或者并不想創(chuàng)建太多的類,這時(shí)候我們可以通過以下方式去實(shí)現(xiàn)解析

//使用JObject(JSON.NET)
//反序列化成JObject
JObject jobj = JObject.Parse(json);
//輸出:張三
Console.WriteLine(jobj["name"].ToString());
//解析hobbys
?JArray jarr = JArray.Parse(jobj["hobbys"].ToString());
//迭代jarr即可
?
?
//同樣的,假如我們有一個(gè)JObject對象
?JObject obj = new JObject();
?obj["name"] = "張三";
?obj["age"] = 20;
?//輸出json數(shù)據(jù),直接ToString()就可以
?Console.WriteLine(obj.ToString());

如果說你的Json結(jié)構(gòu)是一個(gè)數(shù)組形式的話,即[{},{},{}],我們可以通過以下方式去解析

//第一種:DataTable
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
//或者使用JavaScriptSerializer
dt =jss.Deserialize<DataTable>(json);
//解析DataTable即可
?
?
//第二種:JArray
JArray jarr = JArray.Parse(json);
//然后去迭代jarr即可
foreach (var j in jarr)
{
? ? Console.WriteLine(j["key"]);
}
?
?
//第三種,也就是我們上面提到了有實(shí)體類的情況下
List<Studet> list = JsonConvert.DeserializeObject<List<Studet>>(json);

以上基本可以解決我們的日常開發(fā)需求,個(gè)人推薦使用JSON.NET。

總結(jié)

這些僅為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#使用Dll的幾種方法示例

    C#使用Dll的幾種方法示例

    使用 DLL(動態(tài)鏈接庫)是 C# 開發(fā)中常見的任務(wù)之一,DLL 文件包含可以在運(yùn)行時(shí)加載的代碼和數(shù)據(jù),允許程序共享功能和資源,降低程序的內(nèi)存占用并促進(jìn)代碼的復(fù)用,本篇文章將深入探討 C# 中使用 DLL 的多種方法,并提供相關(guān)代碼示例,需要的朋友可以參考下
    2024-10-10
  • 簡單介紹三層架構(gòu)工作原理

    簡單介紹三層架構(gòu)工作原理

    這篇文章介紹了三層架構(gòu)的工作原理,二層與三層架構(gòu)的區(qū)別,三層架構(gòu)的優(yōu)劣勢。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 漢字轉(zhuǎn)拼音縮寫示例代碼(Silverlight和.NET 將漢字轉(zhuǎn)換成為拼音)

    漢字轉(zhuǎn)拼音縮寫示例代碼(Silverlight和.NET 將漢字轉(zhuǎn)換成為拼音)

    本篇文章主要介紹了漢字轉(zhuǎn)拼音縮寫示例代碼(Silverlight和.NET 將漢字轉(zhuǎn)換成為拼音) 需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C# 通過同步和異步實(shí)現(xiàn)優(yōu)化做早餐的時(shí)間

    C# 通過同步和異步實(shí)現(xiàn)優(yōu)化做早餐的時(shí)間

    本文以一個(gè)簡單的小例子—如何做一頓早餐及如何優(yōu)化做早餐的時(shí)間來讓大家具體了解一下同步和異步方法的區(qū)別,需要的朋友可以參考一下
    2021-12-12
  • c# RSA非對稱加解密及XML&PEM格式互換方案

    c# RSA非對稱加解密及XML&PEM格式互換方案

    這篇文章主要介紹了c# RSA非對稱加解密及XML&PEM格式互換方案,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#導(dǎo)出Excel的幾種常見方式及詳細(xì)實(shí)現(xiàn)步驟

    C#導(dǎo)出Excel的幾種常見方式及詳細(xì)實(shí)現(xiàn)步驟

    excel導(dǎo)出在C#代碼中應(yīng)用己經(jīng)很廣泛了,我這里就做些總結(jié),下面這篇文章主要給大家介紹了關(guān)于C#導(dǎo)出Excel的幾種常見方式及詳細(xì)實(shí)現(xiàn)步驟的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • C#Winform窗口移動方法

    C#Winform窗口移動方法

    今天小編就為大家分享一篇C#Winform窗口移動方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • C#動態(tài)創(chuàng)建button按鈕的方法實(shí)例詳解

    C#動態(tài)創(chuàng)建button按鈕的方法實(shí)例詳解

    這篇文章主要介紹了C#動態(tài)創(chuàng)建button按鈕的方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C#中static void Main(string[] args) 參數(shù)示例詳解

    C#中static void Main(string[] args) 參數(shù)示例詳解

    這篇文章主要介紹了C#中static void Main(string[] args) 參數(shù)詳解,本文通過具體示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2017-03-03
  • 把DLL文件打包進(jìn)EXE的操作技巧

    把DLL文件打包進(jìn)EXE的操作技巧

    用VS2005建立一個(gè)windows項(xiàng)目,取名test,之后把生成DLL文件打包進(jìn)EXE,接下來介紹詳細(xì)的操作技巧,感興趣的朋友可以了解下啊,或許對你有所幫助
    2013-02-02

最新評論

鸡东县| 凤冈县| 丰城市| 和静县| 三台县| 油尖旺区| 江都市| 许昌市| 高要市| 白玉县| 泾源县| 山丹县| 大荔县| 安康市| 合水县| 新密市| 红河县| 兴业县| 连江县| 汪清县| 新竹市| 卢氏县| 昂仁县| 昭觉县| 建瓯市| 黄大仙区| 衡阳市| 娄烦县| 大厂| 江永县| 德惠市| 桐梓县| 台东县| 景泰县| 闽清县| 同心县| 曲阳县| 林州市| 弥勒县| 西宁市| 阿克陶县|