C# 如何在循环json数据时从jToken获取值

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

我有以下json数据:

  {
    "@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"
}
我想从when
pair.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