我正在向 SharePoint 查询文档库中所有文件夹的列表(使用 REST API)。我需要知道找到的文件夹数量以及每个文件夹中的项目数量。 (这些数字将随着客户端添加/删除文件夹而定期更改。
我目前已使用以下代码将从查询返回的字符串传递到 NewtonsoftJObject
:
JObject Json = JObject.Parse(Folders);
以下是我返回的JSON的简化版本:
{
"d": {
"results": [
{
"__metadata": {
"id": "https://client.sharepoint.com/testsubsite/api/Web/GetFolderByServerRelativePath(decodedurl='testsubsite/CountryFolders/Germany')"
},
"Name": "Germany",
"itemCount": 3
},
{
"__metadata": {
"id": "https://client.sharepoint.com/testsubsite/api/Web/GetFolderByServerRelativePath(decodedurl='testsubsite/CountryFolders/UK')"
},
"Name": "UK",
"itemCount": 5
}
]
}
}
有没有办法将其放入一个foreach
循环中,以对找到的不同文件夹重复(在本例中为 2:"德国"和英国)或以结果计数作为限制器的for
循环。
我的 C# 代码如下所示,"文件夹"是从初始查询收到的字符串。
JObject Json = JObject.Parse(Folders);
JArray resultArray = (JArray)Json["results"];
for (int i = 0; i < resultArray.Count; i++)
{
var item = (JObject)resultArray[i];
//do something with item
}
JObject
代码按预期返回 JSON 文件,string name = (string)Json["d"]["results"][0]["Name"];
可用于检索找到的第一个文件夹的名称(德国)。
我试图从"结果"创建一个JArray
,但我的代码卡在那里。没有错误消息;它只是挂在那里。
在上面的代码块中,您忘记了results
在d
内部。 由于 JSON 中的根级别没有results
,因此resultArray
将为 null。 当您尝试访问循环中的resultArray.Count
时,您会得到一个NullReferenceException
,但是如果您没有看到错误消息,代码中的某些内容一定在吃掉它。
若要解决此问题,请更改此行:
JArray resultArray = (JArray)Json["results"];
对此:
JArray resultArray = (JArray)Json["d"]["results"];
小提琴:https://dotnetfiddle.net/CcA9Uv