C# 处理 JSON 之 Json.NET 库

▪ Json.NET 介绍

在做开发的时候,很多数据交换都是以 JSON 格式传输的。而使用 JSON的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSerializerJavaScriptSerializerJson.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());

# 输出
/*
{
    "index01" : [
        "lengdo",
        "2015-12-14T00:00:00"
    ]
}
*/
序列化二
JObject jobj = new JObject   
{  
    {"CPU", "Intel"},  
    {"Memory", 2048},  
    {"Drives", new JArray{"DVD","U盘"}}
};

MessageBox.Show(jobj.ToString());

# 输出
/*
{
    "CPU" : "Intel",
    "Memory" : 2048,
    "Drives" : ["DVD", "U盘"]
}
*/
序列化三
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());

# 输出
/*
{
    "scores" : [
        {
            "subject" : "语文",
            "score" : 99
        },
        {
            "subject" : "数学",
            "score" : 88
        }
    ],

    "students" : [
        {
            "name" : "Mark",
            "age" : 8
        },
        {
            "name" : "Jack",
            "age" : 9
        }
    ]
}
*/
序列化四
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());

# 输出
/*
{
    "name"    : "Mark",
    "age"     : "8",
    "results" : [
        {
            "subject" : "语文",
            "score"   : 99
        },
        {
            "subject" : "数学",
            "score"   : 88
        }
    ]
}
*/
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#处理Json数据有多种方法,下面是一些常用的方法: 1. 使用Json.NET Json.NET是一个流行的C# Json,可以用于序列化和反序列化Json数据。它提供了强大的功能,可以轻松地将Json数据转换为C#对象和将C#对象转换为Json数据。这个可以通过NuGet包管理器进行安装,可以使用以下代码进行序列化和反序列化: ```csharp using Newtonsoft.Json; // 将Json字符串转换为对象 var obj = JsonConvert.DeserializeObject<MyClass>(jsonString); // 将对象转换为Json字符串 var jsonString = JsonConvert.SerializeObject(obj); ``` 2. 使用System.Text.Json .NET Core 3.0及以上版本中,可以使用System.Text.Json处理Json数据。这个是一个轻量级的Json,可以与C#内置的JsonSerializer类一起使用,实现Json数据的序列化和反序列化。以下是一个使用System.Text.Json的示例: ```csharp using System.Text.Json; // 将Json字符串转换为对象 var obj = JsonSerializer.Deserialize<MyClass>(jsonString); // 将对象转换为Json字符串 var jsonString = JsonSerializer.Serialize(obj); ``` 3. 使用JavaScriptSerializer类 JavaScriptSerializer类是C#内置的一个Json,可以用于序列化和反序列化Json数据。这个类支持.NET Framework版本,但不支持.NET Core。以下是一个使用JavaScriptSerializer的示例: ```csharp using System.Web.Script.Serialization; // 将Json字符串转换为对象 var serializer = new JavaScriptSerializer(); var obj = serializer.Deserialize<MyClass>(jsonString); // 将对象转换为Json字符串 var jsonString = serializer.Serialize(obj); ``` 以上是处理Json数据的一些常用方法,根据具体的需要可以选择不同的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值