Newtonsoft.Json是一款.net下的Json序列化/反序列化库,省去了手动拼Json的麻烦,可以通过官网或者NuGet下载。
JObject是其中比较万金油的一个类,可以在不使用实体类的情况下构建/解析Json。
1.字符串转JObject
引入命名空间:
using Newtonsoft.Json.Linq;
Json数据:
{
"name": "steam",
"games": [
{
"name": "The Witcher 3",
"price": "63"
},
{
"name": "GTA5",
"price": "93"
}
],
"master": "G pan"
}
string jsonStr = "{\"name\": \"steam\",\"games\":[{\"name\":\"The Witcher 3\",\"price\":\"63\"},{\"name\":\"GTA5\",\"price\":\"93\"}],\"master\":\"G pan\"}";
JObject json = JObject.Parse(jsonStr);
foreach(var item in json)
{
Console.WriteLine(item.Key + "," + item.Value);
}
Console.WriteLine("-------------------------------");
foreach(var item in json["games"])
{
Console.WriteLine(item["name"]);
}
Console.WriteLine("-------------------------------");
Console.WriteLine(json["name"]);
Console.WriteLine(json["games"][0]["name"]);
Console.Read();
运行结果:
从上面的例子可以看出,用JObject.Parse()可以将Json格式的字符串转化为JObject对象,然后分列出了三种情况,遍历该对象,遍历嵌套的Json数据和单独访问其中一个值与嵌套数据中的值,看一眼就明白怎么用了。
2.构建Json对象
JObject json = new JObject { { "name", "steam" }, { "age", "18" } };
Console.WriteLine(json);
Console.WriteLine("--------------------------");
JObject json2 = new JObject { { "name", "basketball" } };
json.Add("爱好", json2);
Console.Write(json);
Console.Read();
上面的例子构建了一个json对象,先输出一遍,再对其嵌套一个json对象,输出如下:
上面的代码很简单,可是有个缺陷,如果“爱好”一栏有多个数据,这种写法就不行了,这个时候就该祭出JArray对象。
从名字就可以看出该对象是一个数组,我们将上面的例子改写为:
JObject json = new JObject { { "name", "steam" }, { "age", "18" } };
Console.WriteLine(json);
Console.WriteLine("--------------------------");
JArray jarray = new JArray {
new JObject { { "name", "basketball" } },
new JObject { { "name", "football" } },
;
json.Add("爱好", jarray);
Console.Write(json);
Console.Read();
运行结果: