JObject如何读取数组中的值?

61
这是JSON字符串:
{"d":[{"numberOfRowsAdded":"26723"}]}
string json = DAO.getUploadDataSummary();
JObject uploadData = JObject.Parse(json);
string array = (string)uploadData.SelectToken("d");

我该如何更改代码以读取“numberOfRowsAdded”中的值?

4个回答

70
JObject uploadData = JObject.Parse(json);
int rowsAdded = Convert.ToInt32((string)uploadData["d"][0]["numberOfRowsAdded"])

4
感谢您的邀请。 "Nice, the developer of Newtonsoft.Json." 可以翻译为“不错,Newtonsoft.Json 的开发者。” - IamBatman

63

你需要将其转换为JArray

string json = "{\"d\":[{\"numberOfRowsAdded\":\"26723\"}]}";
JObject parsed = JObject.Parse(json);
JArray array = (JArray) parsed["d"];
Console.WriteLine(array.Count);

2
那是一个选项,但不需要将其转换为JArray:uploadData["d"][0]["numberOfRowsAdded"] - James Newton-King
@JamesNewton-King:由于某种原因,我把问题理解成想知道数组中元素的数量...而JArray似乎是最简单的方法。 - Jon Skeet

5

我尝试编写了一个通用的方法,可以读取我的 JSON 字符串中的任何部分。我尝试了这个线程上的很多答案,但都不符合我的需求。所以我想出了下面这个方法。我在我的服务层中使用以下方法来从 JSON 字符串中读取配置属性。

public T getValue<T>(string json,string jsonPropertyName)
{                      
    var parsedResult= JObject.Parse(json);

    return parsedResult.SelectToken(jsonPropertyName).ToObject<T>();
}

这是使用它的方法:

var result = service.getValue<List<string>>(json, "propertyName");

因此,您可以使用此方法获取JSON字符串中特定的属性,并将其强制转换为所需的格式。


5

您可以将JObject转换为dynamic对象。
您也可以将数组转换为JArray对象。

JObject yourObject;
//To access to the properties in "dot" notation use a dynamic object
dynamic obj = yourObject;
//Loop over the array
foreach (dynamic item in obj.d) {
  var rows = (int)item.numberOfRowsAdded;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接