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

c#學習教程之JSON文件及解析實例

 更新時間:2022年08月12日 10:57:57   作者:變瘦的鵬少  
json作為互聯(lián)網(wǎng)上輕量便捷的數(shù)據(jù)傳輸格式,越來越受到重視,下面這篇文章主要給大家介紹了關(guān)于c#學習教程之JSON文件及解析的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

一、JSON文件介紹

JSON是存儲和交換文本的語法,類似于XML

但比XML更小,更容易解析,于XML一樣是一種數(shù)據(jù)格式

JSON是一種輕量級的數(shù)據(jù)交換格式,采用完全獨立于語言的文本格式,更容易編寫以及解析

例如

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星連珠","number":9},
{"id":4,"name":"一語成讖","number":999}
]

二、JSO語法規(guī)則

  • 數(shù)據(jù)保存在鍵值對中
  • 數(shù)據(jù)由逗號分割
  • 花括號保存對象
  • 方括號保存數(shù)組

三、引入JSON庫文件

JSON解析器和JSON庫支持許多不同的編程語言

能對json文件進行解析的有很多,詳見JSON官網(wǎng),http://www.json.org/json-en.html

在主要是使用的是LitJSON或者Newtonsoft.Json,LitJSON使用NuGet安裝,界面如下

四、利用JSON.Mapper去解析JSON文件

4.1 JSON為數(shù)組

原始json內(nèi)容

json.txt:

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星連珠","number":9},
{"id":4,"name":"一語成讖","number":999}
]

思想:

1.利用File去讀取json文件
2.通過JsonMapper轉(zhuǎn)為對象(jsondata)
3.使用索引,遍歷jsondata進行輸出

代碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//引入LitJson
using LitJson;

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //JsonMapper類
            //ToObject方法可以將一個json字符串進行解析,
            //解析的結(jié)果是json.date
            //我們使用jsonMapper去解析json文本
            //jsondata代表一個數(shù)據(jù)或者對象
            //json217.txt為數(shù)組[],所以jsonData為數(shù)組
            //注意json文件位置,需要在bug目錄下
            JsonData jsonData =JsonMapper.ToObject(File.ReadAllText("json217.txt")) ;
            //使用foreach去遍歷數(shù)組信息
            //temp也是jsondata類型的,但是temp是一個對象
            foreach (JsonData temp in jsonData)
            {
                //通過索引其去取得temp中的value
                //返回值還是jsondata類型
                JsonData idvalue = temp["id"];
                JsonData namevalue = temp["name"];
                JsonData numbervalue = temp["number"];

                //將jsondata轉(zhuǎn)化為字符串進行輸出
                //name本身就為str,所以不用轉(zhuǎn)換
                int id = Int32.Parse(idvalue.ToString());
                int number = Int32.Parse(numbervalue.ToString());

                //輸出
                Console.WriteLine(id+":"+ namevalue + ":" + number);
            }


            Console.ReadKey();
        }
    }
}

運行結(jié)果

4.2 JSON為數(shù)組,使用實體類

原始json內(nèi)容

json217.txt:

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星連珠","number":9},
{"id":4,"name":"一語成讖","number":999}
]

思想:

1.根據(jù)JSON文件格式,建立實體類,例如根據(jù)json217.txt建立實體類Magic,包含id、name、number三個字段以及一個方法
2.根據(jù)json格式,新建list,使用Magic實體類作為泛型,新建magicList類
List<Magic> magicList = new List<Magic>();
3.通過JsonMapper轉(zhuǎn)為對象(jsondata),賦值到magicList中
4.對magicList進行遍歷輸出

新建一個Magic實體類用于解析

Magic.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace json操作
{
    class Magic
    {
        public int id;

        public string name;

        public int number;

        public override string ToString()
        {
            return string.Format("id:{0},name:{1},numebr:{2}",id,name,number);
        }
    }
}

代碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//引入LitJson
using LitJson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //因為json文件為集合,所以新建一個集合
            List<Magic> magicList = new List<Magic>();

            //依舊使用JsonMapper去進行解析
            JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json217.txt"));
            foreach (JsonData temp in jsonData)
            {
                //創(chuàng)建一個新對象
                Magic magic = new Magic();

                //通過索引其去取得temp中的value
                //返回值還是jsondata類型
                JsonData idvalue = temp["id"];
                JsonData namevalue = temp["name"];
                JsonData numbervalue = temp["number"];

                //將jsondata轉(zhuǎn)化為字符串進行輸出
                //name本身就為str,所以不用轉(zhuǎn)換
                int id = Int32.Parse(idvalue.ToString());
                int number = Int32.Parse(numbervalue.ToString());

                magic.id = id;
                magic.number = number;
                magic.name = namevalue.ToString();
                magicList.Add(magic);

            }
            foreach (var temp in magicList)     
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();
        }
    }
}

運行結(jié)果

可以發(fā)現(xiàn),結(jié)果是一樣的,但是如此做會增加代碼量,不夠方便,下面介紹通過泛型去解析JSON

五、利用Json.MApper結(jié)合泛型去解析JSON文件

5.1JSON為數(shù)組

原始json內(nèi)容

json217.txt:

[
{"id":2,"name":"星河爆破","number":999},
{"id":3,"name":"九星連珠","number":9},
{"id":4,"name":"一語成讖","number":999}
]

思想:

1.對JSON文件進行解析,發(fā)現(xiàn)為外層為數(shù)組格式,可以認為是一個Magic對象數(shù)組
2.使用泛型去解析,用<>表示泛型,如下一個Magic對象數(shù)組表示為Magic[]
JsonMapper.ToObject<Magic[]>
注意:json里面的鍵必須與實體類對應(yīng)
3.遍歷Magic[]

代碼:

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //使用泛型去解析json
            //因為讀取的文件格式為magic實體類的數(shù)組,所以返回是個magic的數(shù)組
            //注意實體類需要對應(yīng)上,
            Magic[] magicArray=JsonMapper.ToObject<Magic[]>(File.ReadAllText("json217.txt"));
            foreach(var temp in magicArray) 
            {
                Console.WriteLine(temp);
            }
            Console.Read();
        }
    }
}

運行結(jié)果:

5.2JSON為數(shù)組,使用集合去解析

思想:

1.對JSON文件進行解析,發(fā)現(xiàn)為外層為數(shù)組格式,也可以認為是個集合
2.使用泛型去解析,用<>表示泛型,如下一個Magic對象數(shù)組表示為Magic[]
JsonMapper.ToObject<Magic[]>改為JsonMapper.ToObject<List<Magic>>
注意:json里面的鍵必須與實體類對應(yīng)
3.遍歷List<Magic

代碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//引入LitJson
using LitJson;
namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //任何可以數(shù)組的地方都可以使用一個集合
            List<Magic> magicklist = JsonMapper.ToObject<List<Magic>>(File.ReadAllText("json217.txt"));
            foreach (var temp in magicklist)
            {
                Console.WriteLine(temp);
            }
            Console.Read();
        }
    }
}

運行結(jié)果:

5.3JSON為對象

原始json內(nèi)容

TextFlie.txt:

{
 "status": 1,
 "apiId": "89757",
 "date": "2022 / 01 / 24 13: 12: 10",
 "message": null,
 "devicelist": [{
				"productcode": "126345",
				"devicecode": "15632478",
				"url": "http://sssss/sssss/ssss/ssss"
				},
				{
				"productcode": "222222",
				"devicecode": "222222",
				"url": "http://sssss/sssss/ssss/ssss"
				},
				{
				"productcode": "333333",
				"devicecode": "333333",
				"url": "http://sssss/sssss/ssss/ssss"
				}
		]
}

思想:

1.對JSON文件進行解析,發(fā)現(xiàn)為整體為對象,對象中包括status、apiId、date、message、devicelist屬性
2.建立實體類模型,新建類IotDevice類,分為IotDevice類和DevicelistItem類
IotDevice類包含:status、apiId、date、message、devicelist(繼承與DevicelistItem)
DevicelistItem類包含:productcode、devicecode、url
有點像俄羅斯套娃的感覺
3.使用json.mapper<實體類>進行解析,返回值為實體類的對象
重點:建立實體類

IotDevice.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace json操作
{
    public class DevicelistItem
    {
        public string productcode { get; set; }
        public string devicecode { get; set; }
        public string url { get; set; }

        public override string ToString()
        {
            return string.Format("productcode:{0},devicecode:{1},url:{2}", productcode, devicecode, url);
        }
    }

    public class IotDevice
    {
        public int status { get; set; }
        public string apiId { get; set; }
        public string date { get; set; }
        public string message { get; set; }
        public List<DevicelistItem> devicelist { get; set; }
        public override string ToString()
        {
            return string.Format("status:{0},apiId:{1},date:{2},message:{3},devicelist:{4},", status, apiId, date, message, devicelist);
        }
    }
}

代碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//引入LitJson
using LitJson;
namespace _032json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //json文檔整體為IotDevice類型,所以轉(zhuǎn)換的時候泛型為<IotDevice>
            //返回值為IotDevice對象
            IotDevice iotdevice = JsonMapper.ToObject <IotDevice>(File.ReadAllText("TextFile1.txt"));
            Console.WriteLine(iotdevice);
            foreach (var temp in iotdevice.devicelist) 
            {
                Console.WriteLine(temp);
            }
            Console.Read();
        }
    }
}

運行結(jié)果:

5.4復雜的JSON文件解析

原始json內(nèi)容

TextFlie2.txt:

在這里插入代碼片

六、字符串轉(zhuǎn)化為JSON

代碼:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//引入LitJson
using LitJson;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace json操作
{
    class Program
    {
        static void Main(string[] args)
        {
            //新建IotDevice的實體類
            IotDevice device1 = new IotDevice();
            device1.date = "2022/02/17";
            device1.apiId = "89757";
            //轉(zhuǎn)為json的字符串
            string json = JsonMapper.ToJson(device1);
            Console.WriteLine(json);
            Console.Read();
        }
    }
}

運行結(jié)果:

七、JSON常用工具

1.JSON格式校驗工具

可以用來對寫的JSON文檔進行校驗,確保書寫正確

地址:http://tools.jb51.net/code/json

2.JSON數(shù)據(jù)生成c#實體類

當JSON設(shè)計多層時,可以使用工具,自動生成實體類模板

地址:http://tools.jb51.net/code/json2csharp

總結(jié)

到此這篇關(guān)于c#學習教程之JSON文件及解析的文章就介紹到這了,更多相關(guān)c# JSON文件解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • unity實現(xiàn)透明水波紋扭曲

    unity實現(xiàn)透明水波紋扭曲

    這篇文章主要為大家詳細介紹了unity實現(xiàn)透明水波紋扭曲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C#中事件處理的個人體會

    C#中事件處理的個人體會

    C#中事件處理的個人體會...
    2006-12-12
  • C#使用Task實現(xiàn)并行編程

    C#使用Task實現(xiàn)并行編程

    這篇文章介紹了C#使用Task實現(xiàn)并行編程的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • WPF綁定實例詳解

    WPF綁定實例詳解

    這篇文章主要介紹了WPF綁定的用法,包括了WPF綁定控件及非控件對象的用法,以及各類參數(shù)的詳細用法,需要的朋友可以參考下
    2014-09-09
  • C# Fiddler插件實現(xiàn)網(wǎng)站離線瀏覽功能

    C# Fiddler插件實現(xiàn)網(wǎng)站離線瀏覽功能

    本文主要介紹了C# Fiddler插件實現(xiàn)網(wǎng)站離線瀏覽功能的原理與方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • C#比較兩個List集合內(nèi)容是否相同的幾種方法

    C#比較兩個List集合內(nèi)容是否相同的幾種方法

    本文詳細介紹了在C#中比較兩個List集合內(nèi)容是否相同的方法,包括非自定義類和自定義類的元素比較,對于非自定義類,可以使用SequenceEqual、排序后比較或HashSet來忽略重復元素,對于自定義類,需要重寫Equals和GetHashCode方法,然后使用相應(yīng)的比較方法
    2025-02-02
  • C#實現(xiàn)簡單超市收銀系統(tǒng)

    C#實現(xiàn)簡單超市收銀系統(tǒng)

    這篇文章主要為大家詳細介紹了C#實現(xiàn)簡單超市收銀系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • [C#].NET中幾種Timer的使用實例

    [C#].NET中幾種Timer的使用實例

    本篇文章主要介紹了.NET中幾種Timer的使用,具有一定的參考價值,有興趣的可以了解一下。
    2016-12-12
  • 使用@符號讓C#中的保留字做變量名的方法詳解

    使用@符號讓C#中的保留字做變量名的方法詳解

    本篇文章是對使用@符號讓C#中的保留字做變量名的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#?System.Linq提供類似SQL語法的高效查詢操作

    C#?System.Linq提供類似SQL語法的高效查詢操作

    System.Linq是C#的一個命名空間,提供了LINQ(語言集成查詢)功能,允許開發(fā)者使用一致的查詢語法來處理不同類型的數(shù)據(jù)源,如數(shù)組、集合、數(shù)據(jù)庫和XML等,本文介紹C#?System.Linq提供類似SQL語法的高效查詢操作,感興趣的朋友一起看看吧
    2024-09-09

最新評論

平武县| 北辰区| 清徐县| 迭部县| 聊城市| 前郭尔| 乌拉特中旗| 溧阳市| 济宁市| 广州市| 剑河县| 庆阳市| 万荣县| 霍林郭勒市| 洪湖市| 陈巴尔虎旗| 临朐县| 定南县| 泰州市| 浦江县| 镇赉县| 大宁县| 石屏县| 德保县| 安仁县| 巢湖市| 安徽省| 阿克陶县| 哈巴河县| 龙山县| 焦作市| 昌乐县| 阿拉善左旗| 平遥县| 扶风县| 陆川县| 义乌市| 富顺县| 东丰县| 金川县| 扎兰屯市|