我试图确定如何访问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,(结果类型)>(...)'也适用于我 –