ASP.Net核心c#使用Microsoft Graph导入JSON文件并将其转换为类

ASP.Net核心c#使用Microsoft Graph导入JSON文件并将其转换为类,c#,json,asp.net-core,microsoft-graph-api,C#,Json,Asp.net Core,Microsoft Graph Api,我需要通过守护程序服务从AAD(Azure Active Directory)获取用户数据。 我已成功获得授权,并已下载所需的用户数据 我似乎无法从视图中的JSON文件中获取数据。我创建了一个模拟JSON属性的模型。我得到的JSON数据如下:string rawJson=wait response.Content.ReadAsStringAsync()当我尝试使用gebruikerscolletie gebruikerscolletie=JsonConvert.DeserializeObject

我需要通过守护程序服务从AAD(Azure Active Directory)获取用户数据。 我已成功获得授权,并已下载所需的用户数据

我似乎无法从视图中的JSON文件中获取数据。我创建了一个模拟JSON属性的模型。我得到的JSON数据如下:
string rawJson=wait response.Content.ReadAsStringAsync()当我尝试使用
gebruikerscolletie gebruikerscolletie=JsonConvert.DeserializeObject(rawJson)反序列化它时,结果仍为空。我怀疑问题出在'@data.context'属性中,但我不知道如何解决这个问题。JSON文件如下所示。如何仅过滤userdata并避免@odata.context

{
{  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users", "value": 
[
{
"businessPhones": [],
"displayName": "John Doe", 
"givenName": "John",      
"jobTitle": "Owner",
"mail": "John@Doe.onmicrosoft.com",  
"mobilePhone": "+1 9 87654321", 
"officeLocation": Dullsville,      
"preferredLanguage": "en-US",
"surname": "Doe",
"userPrincipalName": "John@Doe.onmicrosoft.com",  
"id": "GUID number"    }, 

{      
"businessPhones": [],
"displayName": "SDK Test User", 
"givenName": null,  
"jobTitle": null,   
"mail": null,   
"mobilePhone": null, 
"officeLocation": null, 
"preferredLanguage": null, 
"surname": null, 
"userPrincipalName": "sdk_test@Doe.onmicrosoft.com", 
"id": "GUID"    } 
]
}}
我的代码如下: 对于我的
索引
控制器:

public async Task<IActionResult> Index(string[] args)
    {
        // **************** Regel Authorisation *************************
        // Authorisation and token acquisition removed for simplicity
       //    {     ViewBag.TokenAcquired = "Token acquired";   

            if (result != null)
            {                    
                var httpClient = new HttpClient();
                var apiCaller = new ProtectedApiCallHelper(httpClient);
                await apiCaller.CallWebApiAndProcessResultASync("https://graph.microsoft.com/v1.0/users", result.AccessToken, Display);                    
                return View();                    
            }
        }            
        return View();
    }

private static void Display(GebruikersCollectie gebruikerscollectie)
    {

        View(gebruikerscollectie);                        


    }
公共异步任务索引(字符串[]args)
{
//******************雷格尔授权*************************
//为简便起见,取消了授权和代币获取
//{ViewBag.TokenAcquired=“TokenAcquired”;
如果(结果!=null)
{                    
var httpClient=新的httpClient();
var apiCaller=新的ProtectedApiCallHelper(httpClient);
等待apiCaller.CallWebApiAndProcessResultASync(“https://graph.microsoft.com/v1.0/users,result.AccessToken,显示);
返回视图();
}
}            
返回视图();
}
专用静态无效显示(GebruikerCollectie GebruikerCollectie)
{
视图(gebruikerscollectie);
}
获取JSON数据的方法如下:

public async Task CallWebApiAndProcessResultASync(string webApiUrl, string accessToken, Action<GebruikersCollectie> processResult)
    {
        if (!string.IsNullOrEmpty(accessToken))
        {
            var defaultRequetHeaders = HttpClient.DefaultRequestHeaders;
            if (defaultRequetHeaders.Accept == null || !defaultRequetHeaders.Accept.Any(m => m.MediaType == "application/json"))
            {
                HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                    
            }
            defaultRequetHeaders.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
            HttpResponseMessage response = await HttpClient.GetAsync(webApiUrl);
            if (response.IsSuccessStatusCode)
            {                    
                string rawJson = await response.Content.ReadAsStringAsync();                    
                GebruikersCollectie gebruikerscollectie = JsonConvert.DeserializeObject<GebruikersCollectie>(rawJson);
                processResult(gebruikerscollectie);                 
            }
public异步任务CallWebApiAndProcessResultASync(字符串webApiUrl、字符串accessToken、操作processResult)
{
如果(!string.IsNullOrEmpty(accessToken))
{
var defaultRequetHeaders=HttpClient.DefaultRequestHeaders;
if(defaultRequetHeaders.Accept==null | |!defaultRequetHeaders.Accept.Any(m=>m.MediaType==“应用程序/json”))
{
HttpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
}
defaultRequetHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,accessToken);
HttpResponseMessage response=等待HttpClient.GetAsync(webApiUrl);
if(响应。IsSuccessStatusCode)
{                    
string rawJson=await response.Content.ReadAsStringAsync();
GebruikerCollectie GebruikerCollectie=JsonConvert.DeserializeObject(rawJson);
过程结果(gebruikerscollectie);
}
以下是模型:

public class GebruikersCollectie
{
    public List<Gebruiker> gebruikers { get; set; }
}

public class Gebruiker
{

    public List<int> 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; }
}   
公共类GebruikerCollectie
{
公共列表gebruikers{get;set;}
}
公共级Gebruiker
{
公用列表商务电话{get;set;}
公共字符串displayName{get;set;}
公共字符串givenName{get;set;}
公共字符串jobTitle{get;set;}
公共字符串邮件{get;set;}
公共字符串移动电话{get;set;}
位置{get;set;}的公共字符串
公共字符串首选语言{get;set;}
公共字符串姓氏{get;set;}
公共字符串userPrincipalName{get;set;}
公共字符串id{get;set;}
}   

我在NewtonSoft的文档中找到了答案

首先,获取JsonString并将其转换为JObject

string rawJson = await response.Content.ReadAsStringAsync();
JObject jsonResult = JsonConvert.DeserializeObject(rawJson) as JObject;
在apicaller的回调方法中,您可以借助
JToken
仅此而已

现在我需要找到一种方法将其放入视图中。由于当前方法无效,我需要找到一种方法使其工作。请评论任何想法

private static void ZetKlaar(JObject jsonResult)
    {

        IList<JToken> resultaten = jsonResult["value"].Children().ToList();



        IList<Gebruiker> gebruikers = new List<Gebruiker>();            
        foreach (JToken resultaat in resultaten)
        {
            Gebruiker gebruiker = resultaat.ToObject<Gebruiker>();
            gebruikers.Add(gebruiker);
            //collectie.gebruikers.Add(gebruiker);                
        }

        Console.WriteLine(gebruikers);


    }
私有静态void zetklar(JObject jsonResult)
{
IList resultaten=jsonResult[“value”].Children().ToList();
IList gebruikers=新列表();
foreach(JToken resultat in resultate)
{
Gebruiker-Gebruiker=resultaat.ToObject();
添加(gebruiker);
//collectie.gebruikers.Add(gebruikers);
}
控制台写入线(gebruikers);
}

我在NewtonSoft的文档中找到了答案

首先,获取JsonString并将其转换为JObject

string rawJson = await response.Content.ReadAsStringAsync();
JObject jsonResult = JsonConvert.DeserializeObject(rawJson) as JObject;
在apicaller的回调方法中,您可以借助
JToken
仅此而已

现在我需要找到一种方法将其放入视图中。由于当前方法无效,我需要找到一种方法使其工作。请评论任何想法

private static void ZetKlaar(JObject jsonResult)
    {

        IList<JToken> resultaten = jsonResult["value"].Children().ToList();



        IList<Gebruiker> gebruikers = new List<Gebruiker>();            
        foreach (JToken resultaat in resultaten)
        {
            Gebruiker gebruiker = resultaat.ToObject<Gebruiker>();
            gebruikers.Add(gebruiker);
            //collectie.gebruikers.Add(gebruiker);                
        }

        Console.WriteLine(gebruikers);


    }
private static void ZetKlaar(JObject jsonResult)
{
IList resultaten=jsonResult[“value”].Children().ToList();
IList gebruikers=新列表();
foreach(JToken resultat in resultate)
{
Gebruiker-Gebruiker=resultaat.ToObject();
添加(gebruiker);
//collectie.gebruikers.Add(gebruikers);
}
控制台写入线(gebruikers);
}

最有可能的是
gebruikerscolectie
模型与JSON不匹配。您可以共享该模型吗?即a?@dbc我已包含该模型最有可能的是
gebruikerscolectie
模型与JSON不匹配。您可以共享该模型吗?即a?@dbc我已包含该模型