C# 如何在循环json数据时从jToken获取值
我有以下json数据:C# 如何在循环json数据时从jToken获取值,c#,json,C#,Json,我有以下json数据: { "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users", "@odata.nextLink": "https://graph.microsoft.com/v1.0/users?$top=999&$skiptoken=X%27445370740200010000001B3A6461726C61682E6469736D756B657340646974726F6C2
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/users?$top=999&$skiptoken=X%27445370740200010000001B3A6461726C61682E6469736D756B657340646974726F6C2E636F6D29XXXXXXD396339312D343134362D393833322D346537366430363033356563B900000000000000000000%27",
"value": [{
"businessPhones": [999999],
"displayName": "___XXXXX_Conv_SA___",
"givenName": null,
"jobTitle": null,
"mail": null,
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "__XXXXX_Conv_SA___@company.onmicrosoft.com",
"id": "e7dc80e8-482d-4020-bb81-eee9458f5a37"
}, {
"businessPhones": [9197883],
"displayName": "Internet Guest Account",
"givenName": null,
"jobTitle": null,
"mail": "_XXXXX_BXXXXS@company.com",
"mobilePhone": 99983333,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "_XXXX_BACCHUS@company.onmicrosoft.com",
"id": "0f8dc1ee-0bf3-497a-ad95-33"
}]
}
我正在获取JSON字符串中的JSON数据,如下所示
GraphUsers=(JObject)JsonConvert.DeserializeObject(json);
JToken userData=null;
foreach(GraphUsers中的var对)
{
控制台写入线(配对键);
控制台写入线(对值);
if(pair.Key.Equals(“值”))
{
//只需从数组中获取任意随机值
JToken JToken=pair.Value[3];
userData=jToken;
Console.WriteLine(用户数据);
}
}
现在,当循环中pair.Key.Equals(“value”)
时,数据如下所示:
{[
{
"businessPhones": [XXXXXXX],
"displayName": "___VMware_Conv_SA___",
"givenName": null,
"jobTitle": null,
"mail": null,
"mobilePhone": XXXXX,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "___VXXX___@XXXX.onmicrosoft.com",
"id": "e7dc80e8-482d-4020-bb81-eee9458f5a37"
},
{
"businessPhones": [XXXX],
"displayName": "Internet Guest Account",
"givenName": null,
"jobTitle": null,
"mail": "_IUSR_BACCHUS@XXXXX.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "_XXXX@XXX.onmicrosoft.com",
"id": "0f8dc1ee-0bf3-497a-ad95-d3935beee515"
},
{
"businessPhones": [],
"displayName": "Internet Guest Account",
"givenName": null,
"jobTitle": null,
"mail": "_XXX@XXXXX.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "_XXXXX@XXX.onmicrosoft.com",
"id": "37981ed8-7b9a-4883-a300-f7d9b4b7fca2"
},
{
"businessPhones": [],
"displayName": "Internet Guest Account",
"givenName": null,
"jobTitle": null,
"mail": "_IUSR_XXX@XXXXX.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "_XXXXR@XXX.onmicrosoft.com",
"id": "43ac2c00-663b-4ae3-b3a6-7a9a74e89a12"
},
{
"businessPhones": [],
"displayName": "Internet Guest Account",
"givenName": null,
"jobTitle": null,
"mail": "XXXXXX@XXXX.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "_IUSR_XXX@XXXX.onmicrosoft.com",
"id": "b5937f36-e2e5-4687-83ca-9640b2679e0c"
},
]}
userData
具有以下值和格式:
{
"businessPhones": [],
"displayName": "Internet Guest Account",
"givenName": null,
"jobTitle": null,
"mail": "_IUSR_XXX@XXXXX.com",
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "_XXXXR@XXX.onmicrosoft.com",
"id": "43ac2c00-663b-4ae3-b3a6-7a9a74e89a12"
}
我想从whenpair.Key.Equals(“value”)
和userData
变量中提取并检查每个循环中的商务电话
,显示名称
,等等。
附件是JSON数据在特定点的调试监视
我还尝试将userData
转换为字典,如下所示
linkDictionary=userData.ToObject();
1-创建与您的
jsonFormat
public class jsonModel
{
public string @odata_context { get; set; }
public string @odata_nextLink { get; set; }
public List<valueModel> value { get; set; }
}
public class valueModel
{
public List<string> businessPhones { get; set; }
public string displayName { get; set; }
public string givenName { get; set; }
public string jobTitle { get; set; }
public string mail { get; set; }
public string mobilePhone { get; set; }
public string officeLocation { get; set; }
public string preferredLanguage { get; set; }
public string surname { get; set; }
public string userPrincipalName { get; set; }
public string id { get; set; }
}
3-将对象从jsonString
反序列化到JsonModel
jsonModel data = JsonConvert.DeserializeObject<jsonModel>(json);
注意:
@odata.context
不是有效的json属性名称,因为。
不是用于命名的有效字符。因此,我将。
替换为,
,您可以发送聊天请求吗。@AllTech您可以发布GraphUsers类吗?@Mr.AF GraphUsers是JObject GraphUsers;我还尝试将userData转换为Dictionary。您可以使用JObject
索引器访问“value”
的值,而无需循环,如下所示:foreach(GraphUsers[“value”]中的var obj){var displayName=(string)obj[“displayName”];var phones=obj[“businessPhones”]。ToObject();}
这就是你想要的吗?@MrAF非常感谢。最初我只创建了valueModel,没有创建JsonModel。但是,如何使用@odata_nextLink获取下一组用户。这只包含来自MS Graph api的999个用户。@AllTech该示例已完成,您可以对1个或1000个用户使用它,无论是谁。没有区别。@AllTech只需将json字符串传递给deserializer@AllTech您的json value属性是对象数组,因此您可以看到我已启动valueModel数组,因此值数组长度可以是1或999,但在简化示例中,我认为它是1。
namespace ConsoleAppForTest
{
class Program
{
static void Main(string[] args)
{
string json = "{" +
"\"@odata_context\": \"https://graph.microsoft.com/v1.0/$metadata#users\"," +
"\"@odata_nextLink\": \"https://graph.microsoft.com/v1.0/users?$top=999&$skiptoken=\"," +
"\"value\": [{" +
"\"businessPhones\": [999999]," +
"\"displayName\": \"___XXXXX_Conv_SA___\"," +
"\"givenName\": null," +
"\"jobTitle\": null," +
"\"mail\": null," +
"\"mobilePhone\": null," +
"\"officeLocation\": null," +
"\"preferredLanguage\": null," +
"\"surname\": null," +
"\"userPrincipalName\": \"__XXXXX_Conv_SA___@company.onmicrosoft.com\"," +
"\"id\": \"e7dc80e8-482d-4020-bb81-eee9458f5a37\"" +
"}]" +
"}";
jsonModel data = JsonConvert.DeserializeObject<jsonModel>(json);
foreach (valueModel i in data.value.ToList())
{
Console.WriteLine("Complete Value object");
Console.WriteLine("--------START---------");
Console.WriteLine(JsonConvert.SerializeObject(i));
Console.WriteLine("---------END----------");
Console.WriteLine("----------------------");
Console.WriteLine("get value by property name");
Console.WriteLine("=> businessPhones:" + i.businessPhones[0]);
Console.WriteLine("=> displayName:" + i.displayName);
Console.WriteLine("=> givenName:" + i.givenName);
Console.WriteLine("=> jobTitle:" + i.jobTitle);
Console.WriteLine("=> mail:" + i.mail);
Console.WriteLine("=> and so on");
}
Console.ReadLine();
}
public class jsonModel
{
public string @odata_context { get; set; }
public string @odata_nextLink { get; set; }
public List<valueModel> value { get; set; }
}
public class valueModel
{
public List<string> businessPhones { get; set; }
public string displayName { get; set; }
public string givenName { get; set; }
public string jobTitle { get; set; }
public string mail { get; set; }
public string mobilePhone { get; set; }
public string officeLocation { get; set; }
public string preferredLanguage { get; set; }
public string surname { get; set; }
public string userPrincipalName { get; set; }
public string id { get; set; }
}
}
}
Complete Value object
--------START---------
{"businessPhones":["999999"],"displayName":"___XXXXX_Conv_SA___","givenName":null,"jobTitle":null,"mail":null,"mobilePhone":null,"officeLocation":null,"preferredLanguage":null,"surname":null,"userPrincipalName":"__XXXXX_Conv_SA___@company.onmicrosoft.com","id":"e7dc80e8-482d-4020-bb81-eee9458f5a37"}
---------END----------
----------------------
get value by property name
=> businessPhones:999999
=> displayName:___XXXXX_Conv_SA___
=> givenName:
=> jobTitle:
=> mail:
=> and so on