繁体   English   中英

如何在 C# 中使用嵌套的 json 对象

[英]how to work with nested json object in c#

api 返回嵌套的 json,我不知道从中检索数据并将其映射到我的模型。 我想从嵌套中检索数据,但不确定如何使用索引和值来执行此操作。 提前致谢。

   public class MikesExcelModel
    {
        //public int id;
        //public object AuthorizingManagerId;
        public string Name;
        //public DateTime UpdateDate;
        public string Phone;
        public string Email;
    }




    public class MikesExcelResults
    {
        public List<MikesExcelModel> value = new List<MikesExcelModel>();
    }


    public List<MikesExcelModel> GetExcel()
    {
        using (HttpClient client = new HttpClient())
        {
            addToken(client);
            var result = client.GetAsync("https://graph.microsoft.com/beta/sites/ucfdev.sharepoint.com,4c319763-130d-4ee1-bc1f-72543da0a847,8a2f59f4-9d56-4aec-be21-33d0347293d1/drives/b!Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m/items/01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH/workbook/worksheets('sheet1')/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows").Result;
            if (result.IsSuccessStatusCode)
            {
                var responseContent = result.Content;

                // by calling .Result you are synchronously reading the result
                string responseString = responseContent.ReadAsStringAsync().Result;
                JavaScriptSerializer serialiser = new JavaScriptSerializer();
               // dynamic apiResult = serialiser.DeserializeObject(responseString);
  
                 return Utilities.DeserializeObject<MikesExcelResults>(result.Content.ReadAsStringAsync().Result).value;
            }
            else
                throw new Exception("Couldn't get excel datas.");

        }
    }

}

api 返回的数据如下所示:

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets('sheet1')/tables('%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D')/rows",
    "value": [
        {
            "@odata.id": "/sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows/itemAt(index=0)",
            "index": 0,
            "values": [
                [
                    "Mike Callahan",
                    "407-266-1431",
                    "MTC@ucf.edu"
                ]
            ]
        },
        {
            "@odata.id": "/sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows/itemAt(index=1)",
            "index": 1,
            "values": [
                [
                    "Michael Callahan",
                    "407-823-3455",
                    "mtcallah@ucf.edu"
                ]
            ]
        },
        {
            "@odata.id": "/sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows/itemAt(index=2)",
            "index": 2,
            "values": [
                [
                    "cvcfcv",
                    "zVCCvc",
                    "cvvvvb"
                ]
            ]
        }
    ]
}

也许是使用Newtonsoft.Json库提取 JSON 数据的传统方法。

  1. jsonData转换为JObject (通过JObject.Parse )。
  2. 获取一级value
  3. 获取二级values
  4. 扁平化二级values

[[["Mike Callahan", "407-266-1431", "MTC@ucf.edu"], ...]]

[["Mike Callahan", "407-266-1431", "MTC@ucf.edu"], ...]
  1. flattenChildrenValues转换为List<MikesExcelModel>
  2. List<MikesExcelModel>添加到results.value
using System;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
var jsonData = @"{
            ""@odata.context"": ""https://graph.microsoft.com/beta/$metadata#sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets('sheet1')/tables('%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D')/rows"",
            ""value"": [
                {
                    ""@odata.id"": ""/sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows/itemAt(index=0)"",
                    ""index"": 0,
                    ""values"": [
                        [
                            ""Mike Callahan"",
                            ""407-266-1431"",
                            ""MTC@ucf.edu""
                        ]
                    ]
                },
                {
                    ""@odata.id"": ""/sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows/itemAt(index=1)"",
                    ""index"": 1,
                    ""values"": [
                        [
                            ""Michael Callahan"",
                            ""407-823-3455"",
                            ""mtcallah@ucf.edu""
                        ]
                    ]
                },
                {
                    ""@odata.id"": ""/sites('ucfdev.sharepoint.com%2C4c319763-130d-4ee1-bc1f-72543da0a847%2C8a2f59f4-9d56-4aec-be21-33d0347293d1')/drives('b%21Y5cxTA0T4U68H3JUPaCoR_RZL4pWnexKviEz0DRyk9HjXtfo70gjRbH706GdwO5m')/items('01HA4SXKSESD3RW3UYPNCZ2OHQAEWWDTKH')/workbook/worksheets(%27%7B00000000-0001-0000-0000-000000000000%7D%27)/tables(%27%7B079215E2-A6D7-4CC2-AB1E-9AC38F36D1CC%7D%27)/rows/itemAt(index=2)"",
                    ""index"": 2,
                    ""values"": [
                        [
                            ""cvcfcv"",
                            ""zVCCvc"",
                            ""cvvvvb""
                        ]
                    ]
                }
            ]
        }";
        
var jsonObj = JObject.Parse(jsonData);
// Get first-level value
JArray jsonValue = jsonObj["value"] as JArray;

// Get second-level values
var childrenValues = jsonValue.Children<JObject>()["values"];
        
// Flatten second-level values
var flattenChildrenValues = childrenValues.Values<JArray>() as IEnumerable<JArray>;

// Read flattenChildrenValues to List<MikesExcelModel>
List<MikesExcelModel> excelModels = flattenChildrenValues
    .Select(x => new MikesExcelModel
                {
                    Name = x[0].ToString(),
                    Phone = x[1].ToString(),
                    Email = x[2].ToString()
                })
    .ToList();
        
// Add List<MikesExcelModel> to results.value
MikesExcelResults results = new MikesExcelResults();
results.value.AddRange(excelModels);
                
foreach (var model in results.value)
{
    Console.WriteLine(String.Format("Name: {0}, Phone: {1}, Email: {2}", model.Name, model.Phone, model.Email));    
}

示例程序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM