栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > .Net

C# 处理 JSON 之 Json.NET 库

.Net 更新时间:发布时间: 百科书网 趣学号
▪ Json.NET 介绍

在做开发的时候,很多数据交换都是以 JSON 格式传输的。而使用 JSON的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSerializer,JavaScriptSerializer 和 Json.NET(或者叫 Newtonsoft.Json)。这里推荐性能以及通用性较好 Json.NET,虽然这个不是微软的类库,但是它是一个开源的世界级的 JSON 操作类库,无论是使用便利上还是性能上都非常棒。

▪ Json.NET 安装

因为 Json.NET 是非微软官方类库,所以你需要先去官网下载:http://www.newtonsoft.com/json。

当然,我并不推荐你采用手动去下载并添加引用的这种方式,比较繁琐。你可以直接在 VS 的 ++解决方案资源管理器++ 窗口里,++右击引用++ -> ++管理 NuGet 程序包…++,在左侧弹出的窗口 浏览 里搜索 Newtonsoft.Json,然后安装即可。

最后在程序头中加入如下代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq; // 使用 JArray 和 JObject
▪ Json.NET 使用之字符解析 解析数组型数据
string json = "[{'name':'Jack','age':'25'},{'name':'KeKe','age':'20'}]";

// 数据解析
JArray jarr = JArray.Parse(json);  # 方式一
// JArray jarr = (JArray)JsonConvert.DeserializeObject(json);  # 方式二

// 数据获取:方式一
MessageBox.Show(jarr[0]["name"].ToString());  // 输出 Jack
MessageBox.Show(jarr[1]["name"].ToString());  // 输出 KeKe

// 数据获取:方式二
JObject jobj = (JObject)jarr[0];
MessageBox.Show(jobj["name"].ToString());  // 输出 Jack

// 数据获取:方式三
foreach( JObject obj in jarr ) MessageBox.Show(obj["name"].ToString());  // 依次输出 Jack,KeKe

注:JArray 只能用来查找索引的项对象,找到对象需要转换为 JObject,再查找对应的属性值

解析对象型数据
string json = "{'man':{'one':'刘德华','two':'张学友'},'woman':{'one':'林心如','two':'苍井空'}}";

// 数据解析:
JObject objs = JObject.Parse(json);  # 方式一
// JObject objs = (JObject)JsonConvert.DeserializeObject(json);  # 方式二

// 数据获取:方式一
MessageBox.Show(objs["man"]["one"].ToString());  // 输出 刘德华
MessageBox.Show(objs["man"]["two"].ToString());  // 输出 张学友
解析对象型数据(复杂)
string json = "{'error':0, 'users':[{'name':'刘德华','age':'25'},{'one':'林心如','two':'苍井空'}}]";

// 数据解析:
JObject objs = JObject.Parse(json);  # 方式一
// JObject objs = (JObject)JsonConvert.DeserializeObject(json);  # 方式二

// 数据获取:方式一
MessageBox.Show(objs["man"]["one"].ToString());  // 输出 刘德华
MessageBox.Show(objs["man"]["two"].ToString());  // 输出 张学友
▪ Json.NET 使用之数据序列化 序列化一
JArray jarr = new JArray();

jarr.Add("lengdo");
jarr.Add(new DateTime(2015, 12, 14));

JObject jobj = new JObject();
jobj["index01"] = jarr;

MessageBox.Show(jobj.ToString());

# 输出

序列化二
JObject jobj = new JObject   
{  
    {"CPU", "Intel"},  
    {"Memory", 2048},  
    {"Drives", new JArray{"DVD","U盘"}}
};

MessageBox.Show(jobj.ToString());

# 输出

序列化三
JObject jobj = new JObject();

JArray scores = new JArray
{
    new JObject{{"subject","语文"}, {"score",99}},
    new JObject{{"subject","数学"}, {"score",88}}
};

JArray students = new JArray
{
    new JObject{{"name","Mark"}, {"age",8}},
    new JObject{{"name","Jack"}, {"age",9}}
};

jobj.Add("scores", scores);
jobj.Add("students", students);

MessageBox.Show(jobj.ToString());

# 输出

序列化四
JObject jobj = new JObject{{"name","Mark"}, {"age","8"}};

JArray results = new JArray
{
    new JObject{{"subject","语文"}, {"score",99}},
    new JObject{{"subject","数学"}, {"score",88}}
};

jobj.Add("results", results);

MessageBox.Show(jobj.ToString());

# 输出

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1065977.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号