我試圖確定如何訪問JObject中的數據,但我無法確定如何使用它。如何枚舉JObject?
JObject Object = (JObject)Response.Data["my_key"];
我可以將它打印到控制檯做Console.WriteLine(對象),我看到的數據,它看起來像:
{
"my_data" : "more of my string data"
...
}
,但我不知道如何只是想迭代/枚舉通過它,任何人有任何想法?我現在處於這樣的狀態。
我試圖確定如何訪問JObject中的數據,但我無法確定如何使用它。如何枚舉JObject?
JObject Object = (JObject)Response.Data["my_key"];
我可以將它打印到控制檯做Console.WriteLine(對象),我看到的數據,它看起來像:
{
"my_data" : "more of my string data"
...
}
,但我不知道如何只是想迭代/枚舉通過它,任何人有任何想法?我現在處於這樣的狀態。
如果你看看the documentation for JObject
,你會發現它實現了IEnumerable<KeyValuePair<string, JToken>>
。所以,你可以在它簡單地使用foreach
迭代:
foreach (var x in obj)
{
string name = x.Key;
JToken value = x.Value;
…
}
答案並沒有爲我工作。我不知道它是如何得到這麼多票。儘管它幫助我指出了一個方向。
這是爲我工作的回答:
foreach (var x in jobj)
{
var key = ((JProperty) (x)).Name;
var jvalue = ((JProperty)(x)).Value ;
}
與此(此行後面:JObject priceComplianceJson = JObject.Parse(File.ReadAllText(fullPath));)我得到,「無法轉換類型」System.Collections.Generic.KeyValuePair <字符串,Newtonsoft.Json.Linq.JToken> '到'Newtonsoft.Json.Linq.JProperty'「 刪除鑄件的工作,雖然:var key = x.Key; var jvalue = x.Value; - 至少它編譯...我明天將捷克的功能。 –
JObjects可以通過JProperty對象通過它投射到JToken列舉:
foreach (JProperty x in (JToken)obj) { // if 'obj' is a JObject
string name = x.Name;
JToken value = x.Value;
}
如果你有另一個內部嵌套JObject JObject,您不需要投射,因爲訪問器將返回一個JToken:
foreach (JProperty x in obj["otherObject"]) { // Where 'obj' and 'obj["otherObject"]' are both JObjects
string name = x.Name;
JToken value = x.Value;
}
感謝您提供有用的信息! – SimplyInk
你也可以像使用linq一樣方便地使用:'obj.Properties()。Select(p => p.Name +「:」+ p.Value)'。 – itslittlejohn
這是正確的,但出於我不明白的原因,除非明確轉換爲可枚舉類型,否則不能將其與Linq一起使用。即你((IEnumerable>)obj).Select(...)'而不是普通的'obj.Select(...)';或者至少這是我發現它是我的代碼的一部分。 –
@AdrianRatnapala你的obj聲明是動態的嗎?擴展方法(如Enumerable.Select)不適用於此。 – svick
不,在我的例子中'obj'的類型是'JObject';但'JObject'似乎和'dynamic'有類似的問題。編譯器不能推斷'.Select'的類型參數。我可以明確地給他們,'obj.Select,(結果類型)>(...)'也適用於我 –