1. 程式人生 > >C# 使用dynamic類型來訪問JObject對象

C# 使用dynamic類型來訪問JObject對象

訪問 res else 方便 IT tail PE col class

原文:C# 使用dynamic類型來訪問JObject對象

dynamic是C#裏面的動態類型,可在未知類型的情況訪問對應的屬性,非常靈活和方便。

使用Json.Net可以把一個Json字符串轉換成一個JObject對象,如果有已知強類型,如果有已知對應的強類型,可以直接轉成對應的類型。但如果沒有,要訪問Json裏面對應的數據的時候,就顯得比較麻煩。我們可以借助DynamicObject來訪問對應的屬性。

DynamicObject

我們要創建一個動態類,用於訪問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}");

運行一下程序,看一下輸出結果:

技術分享圖片

原文地址:http://www.zkea.net/codesnippet/detail/post-99.html

C# 使用dynamic類型來訪問JObject對象