[C#.NET][LINQ] Linq to JSON for Json.NET
本文連結
利用 Json.NET 所提供的『物件序列化』、『JSON字串反序列化』的相當的好用,效能也相當的快
序列化 JsonConvert.SerializeObject,可透過匿名型別,動態建立 json
反序列化 JsonConvert.DeserializeObject,需要明確定義 DTO class,才能正確的將 json text 轉換成物件,搭配 VS2013 的功能也能快速幫我們產生對應的 class,省去了敲打 class 的時間
http://www.dotblogs.com.tw/yc421206/archive/2014/03/05/144250.aspx
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
JsonConvert.SerializeObject
JsonConvert.DeserializeObject
Json.NET 提供了 JObject、JProperty、JArray 三個物件可讓我們不需要明確定義 DTO,即可動態操作 JSON DOM,再搭配 dynmic 使用起來可以更方便,我們來看一點例子,開始前需要準備一些工作:
1.準備 Json 資料
string json = @"
{
'd':
{
'GetContextWebInformation':
{
'__metadata':
{
'type': 'SP.ContextWebInformation'
},
'FormDigestTimeoutSeconds': 1800,
'FormDigestValue':
'0xA9C12C0126187B262A1EC95EDC3B8FF18065791F0C52B505E1DF82F59529F6CDA00D8676C7B9A88F9252B12823D56F5259A9DEFA48EC0F16E824CD3190CCE776,13 Jun 2014 05:25:55 -0000',
'LibraryVersion': '15.0.4569.1000',
'SiteFullUrl': 'http://sps2013',
'SupportedSchemaVersions':
{
'__metadata':
{
'type': 'Collection(Edm.String)'
},
'results': [
'14.0.0.0',
'15.0.0.0'
]
},
'WebFullUrl': 'http://sps2013'
}
},
'Persons':[
{
'Name': '余小章',
'Age': 18
},
{
'Name': 'jordan',
'Age': 54
}]
}
";
2.加入 Newtonsoft.Json.dll(from Nuget)
準備工作完成之後便可以開始進行開發
載入整個 DOM
JObject jsonObject = JObject.Parse(json);
這必須依結點的節點一層一層的指定
取出余小章
程式碼
string name = (string)jsonObject["Persons"][1]["Name"]; Console.WriteLine(name);
取出 results[1]
程式碼var result = jsonObject["d"]["GetContextWebInformation"]["SupportedSchemaVersions"]["results"][0]; Console.WriteLine(result);
取出集合
程式碼
var find = jsonObject["d"]["GetContextWebInformation"]["SupportedSchemaVersions"]["results"].Values<string>(); foreach (var item in find) { Console.WriteLine(item); }
使用 JArray
var find = (JArray)jsonObject["d"]["GetContextWebInformation"]["SupportedSchemaVersions"]["results"]; foreach (var item in find) { Console.WriteLine(item.Value<string>()); }
這比上一個方法方便一些些,但仍需要瞭解整個 DOM 結構
var result = jsonObject.d.GetContextWebInformation.FormDigestValue; Console.WriteLine(result);JObject jsonObject = JObject.Parse(json);
這不需要瞭解整個 DOM 結構,只需要給予目標屬性就能取得結果,個人覺得這超好用
取出 FormDigestValue
var formDigestValue = jsonObject.Descendants().OfType<JProperty>().First(p => p.Name == "FormDigestValue").Value; Console.WriteLine(formDigestValue);
取出 Age 集合的值
var ages = jsonObject.Descendants().OfType<JProperty>().Where(o => o.Name == "Age").Values().ToList(); foreach (var age in ages) { Console.WriteLine(age); }
本文出自:http://www.dotblogs.com.tw/yc421206/archive/2014/06/13/145543.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET