JObject如何读取数组中的值?

use*_*830 48 c# json.net

这是json字符串:

{"d":[{"numberOfRowsAdded":"26723"}]}

string json = DAO.getUploadDataSummary();
JObject uploadData = JObject.Parse(json);
string array = (string)uploadData.SelectToken("d");
Run Code Online (Sandbox Code Playgroud)

如何更改代码以读取'numberOfRowsAdded中的值?

Jam*_*ing 51

JObject uploadData = JObject.Parse(json);
int rowsAdded = Convert.ToInt32((string)uploadData["d"][0]["numberOfRowsAdded"])
Run Code Online (Sandbox Code Playgroud)

  • 很好,Newtonsoft.Json的开发人员.1+ (3认同)

Jon*_*eet 44

你需要施放到JArray:

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

  • 这是一个选项,但不需要转换为JArray:uploadData ["d"] [0] ["numberOfRowsAdded"] (2认同)

Car*_*ice 6

我尝试编写一个可以读取 json 字符串任何部分的通用方法。我在这个帖子上尝试了很多答案,但它不适合我的需要。这就是我想出的办法。我在服务层中使用以下方法从 json 字符串读取配置属性。

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

    return parsedResult.SelectToken(jsonPropertyName).ToObject<T>();
}
Run Code Online (Sandbox Code Playgroud)

这就是你将如何使用它:

var result = service.getValue<List<string>>(json, "propertyName");
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用它来获取 json 字符串中的特定属性,并将其转换为您需要的任何内容。


jhe*_*rax 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;
}
Run Code Online (Sandbox Code Playgroud)