您好,登錄后才能下訂單哦!
dynamic是C#里面的動態(tài)類型,可在未知類型的情況訪問對應(yīng)的屬性,非常靈活和方便。
使用Json.Net可以把一個Json字符串轉(zhuǎn)換成一個JObject對象,如果有已知強(qiáng)類型,如果有已知對應(yīng)的強(qiáng)類型,可以直接轉(zhuǎn)成對應(yīng)的類型。但如果沒有,要訪問Json里面對應(yīng)的數(shù)據(jù)的時候,就顯得比較麻煩。我們可以借助DynamicObject來訪問對應(yīng)的屬性。
DynamicObject
我們要創(chuà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í)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。