一、Nuget获得Newtonsoft.Json
PM> Install-Package Newtonsoft.Json
二、字符串和JObject互相转换
JObject jObj = JObject.Parse(string json);
string str = jObj.ToString();
三、匿名对象转换JObject
JObject jObj = JObject.FromObject(new { name = "李四", age = 23 });
四、LINQ方式解析JSON
访问子节点:
string json = @"
{
name: 'zqj',
age: 25,
items:
[
{name: 'Phone', weight:200},
{name: 'Keys', weight:50}
]
}";
JObject jobj = JObject.Parse(json);
JArray jarray = (JArray)jobj["items"];
string item1Name = (string)jobj["items"][0]["name"];
SelectToken方式解析:
string json = @"{
school:{
name:'实验高中',
students:[
{name:'张三',age:18},
{name:'李四',age:19}
],
sites:['济南','聊城']
}
}";
JObject o = JObject.Parse(json);
//SelectToken 方法使用
string schname = (string)o.SelectToken("school.name");
Console.WriteLine(schname); //实验高中
string stuname = (string)o.SelectToken("school.students[1].name");
Console.WriteLine(stuname); //李四
//SelectToken with JSONPath
JToken stu1 = o.SelectToken("$.school.students[?(@.name=='张三')]");
Console.WriteLine(stu1); //{"name": "张三","age": 18}
Console.WriteLine(stu1["age"]); //18
IEnumerable<JToken> stus = o.SelectTokens("$..students[?(@.age>15)]");
foreach (var item in stus)
{
Console.WriteLine(item); //{"name": "张三", "age": 18 }
//{ "name": "李四", "age": 19}
}
//SelectToken with LINQ
// $...name 意思是从当前接口文档的1,2,3级中查找name,并返回结果
IList<string> names = o.SelectTokens("$...name").Select(q => (string)q).ToList();
Console.WriteLine(string.Join(",",names)); //实验高中,张三,李四
参考文章:https://blog.csdn.net/u011127019/article/details/52487130
补充
Unity可以使用JsonUtility进行序列化。