C#使用dynamic類型訪問(wèn)JObject對(duì)象
dynamic是C#里面的動(dòng)態(tài)類型,可在未知類型的情況訪問(wèn)對(duì)應(yīng)的屬性,非常靈活和方便。
使用Json.Net可以把一個(gè)Json字符串轉(zhuǎn)換成一個(gè)JObject對(duì)象,如果有已知強(qiáng)類型,如果有已知對(duì)應(yīng)的強(qiáng)類型,可以直接轉(zhuǎn)成對(duì)應(yīng)的類型。但如果沒(méi)有,要訪問(wèn)Json里面對(duì)應(yīng)的數(shù)據(jù)的時(shí)候,就顯得比較麻煩。我們可以借助DynamicObject來(lái)訪問(wèn)對(duì)應(yīng)的屬性。
DynamicObject
我們要?jiǎng)?chuàng)建一個(gè)動(dòng)態(tài)類,用于訪問(wèn)JObject,代碼如下:
public class JObjectAccessor : DynamicObject { JToken obj; public JObjectAccessor(JToken obj) { this.obj = obj; } public override bool TryGetMember(GetMemberBinder binder, out object result) { result = null; if (obj == null) return false; var val = obj[binder.Name]; if (val == null) return false; result = Populate(val); return true; } private object Populate(JToken token) { var jval = token as JValue; if (jval != null) { return jval.Value; } else if (token.Type == JTokenType.Array) { var objectAccessors = new List<object>(); foreach (var item in token as JArray) { objectAccessors.Add(Populate(item)); } return objectAccessors; } else { return new JObjectAccessor(token); } } }
接下來(lái)就可以開(kāi)始使用它了:
string json = @"{'name': 'Jeremy Dorn','location': {'city': 'San Francisco','state': 'CA'},'pets': [{'type': 'dog','name': 'Walter'}]}"; JObject jobj = JObject.Parse(json); dynamic obj = new JObjectAccessor(jobj); Console.WriteLine($"{obj.name}: {obj.location.city} {obj.location.state}"); Console.WriteLine($"{obj.pets[0].type}: {obj.pets[0].name}");
運(yùn)行一下程序,看一下輸出結(jié)果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#中使用IrisSkin2.dll美化WinForm程序界面的方法
這篇文章主要介紹了c#中使用IrisSkin2.dll美化WinForm程序界面的實(shí)現(xiàn)方法,需要的朋友可以參考下2013-05-05C#讀取與寫(xiě)入txt文件內(nèi)容的實(shí)現(xiàn)方法
在 C# 中讀取和寫(xiě)入文本文件內(nèi)容是一個(gè)常見(jiàn)的任務(wù),本文主要介紹了使用幾種不同方法讀取和寫(xiě)入文本文件的示例,并通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-08-08深入探討C#中的const、readonly關(guān)鍵字
這篇文章主要介紹了深入探討C#中的const、readonly關(guān)鍵字,本文可以幫助你深刻理解這兩個(gè)關(guān)鍵字,而且是面試中最可能面試到的問(wèn)題哦,需要的朋友可以參考下2014-08-08C#調(diào)用WinAPI部分命令的方法實(shí)現(xiàn)
本文主要介紹了C#調(diào)用WinAPI部分命令的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01C#?WPF實(shí)現(xiàn)數(shù)據(jù)記錄導(dǎo)出excel
這篇文章主要為大家詳細(xì)介紹了C#如何基于WPF實(shí)現(xiàn)數(shù)據(jù)記錄導(dǎo)出excel的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11macOS系統(tǒng)下Vscode的python配置教程
這篇文章主要介紹了macOS系統(tǒng)下Vscode的python配置教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04