C#使用dynamic類型訪問JObject對象
dynamic是C#里面的動(dòng)態(tài)類型,可在未知類型的情況訪問對應(yīng)的屬性,非常靈活和方便。
使用Json.Net可以把一個(gè)Json字符串轉(zhuǎn)換成一個(gè)JObject對象,如果有已知強(qiáng)類型,如果有已知對應(yīng)的強(qiáng)類型,可以直接轉(zhuǎn)成對應(yīng)的類型。但如果沒有,要訪問Json里面對應(yīng)的數(shù)據(jù)的時(shí)候,就顯得比較麻煩。我們可以借助DynamicObject來訪問對應(yīng)的屬性。
DynamicObject
我們要?jiǎng)?chuàng)建一個(gè)動(dòng)態(tài)類,用于訪問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);
}
}
}
接下來就可以開始使用它了:
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é)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)websocket雙向通信的示例代碼
本文基于WebSocketSharp實(shí)現(xiàn)了websocket雙向通信,除基本的客戶端向服務(wù)端發(fā)送消息外,也支持客戶端向指定的客戶端發(fā)送消息、群發(fā)消息,其他協(xié)議可自定義,廢話不多說,直接上干貨,需要的朋友可以參考下2024-06-06
C#實(shí)現(xiàn)將應(yīng)用程序設(shè)置為開機(jī)啟動(dòng)的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將應(yīng)用程序設(shè)置為開機(jī)啟動(dòng)的方法,涉及C#針對注冊表的寫入技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
C#利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本
C#中利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本的實(shí)現(xiàn)方法,需要的朋友可以參考下2013-04-04

