Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.Net Core 3.1中将http响应转换为json格式_C#_Asp.net_Asp.net Core_Json.net_Csom - Fatal编程技术网

C# 在.Net Core 3.1中将http响应转换为json格式

C# 在.Net Core 3.1中将http响应转换为json格式,c#,asp.net,asp.net-core,json.net,csom,C#,Asp.net,Asp.net Core,Json.net,Csom,我有一个返回http响应的函数,我想将此返回转换为json格式,以便能够在特定模型中检索和分配一些值。 我使用NetCore3.1 以下是我想制作的模型: public class UserSharePointViewModel { public string DisplayName { get; set; } public string AccountName { get; set; } public string Email { get; set; } pub

我有一个返回http响应的函数,我想将此返回转换为json格式,以便能够在特定模型中检索和分配一些值。 我使用NetCore3.1

以下是我想制作的模型:

public class UserSharePointViewModel
{
    public string DisplayName { get; set; }
    public string AccountName { get; set; }
    public string Email { get; set; }
    public string Picture { get; set; }
}
这是我的功能:

  public async Task<UserSharePointViewModel> GetUserProfilInfoFromSharePoint()
    {
        string accessToken = await GetAccessToken();

        using (var httpClient = new HttpClient())
        {
            httpClient.BaseAddress = new Uri(_configuration["SharePointConfiguration:WebSiteUrl"]);
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            var response = await httpClient.GetAsync("_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|mellafi@naxxum.fr'");


            var finalData = await response.Content.ReadAsStringAsync();
            var _dataResponse = JToken.Parse(JsonConvert.SerializeObject(finalData));

            UserSharePointViewModel userResult = new UserSharePointViewModel()
            {
                AccountName = _dataResponse["AccountName"].ToString(),
                Email = _dataResponse["Email"].ToString(),
                DisplayName = _dataResponse["PersonalUrl"].ToString(),
                Picture = _dataResponse["PictureUrl"].ToString()
            };
            return userResult;
        }
    }
公共异步任务GetUserProfilInfoFromSharePoint()
{
字符串accessToken=等待GetAccessToken();
使用(var httpClient=new httpClient())
{
httpClient.BaseAddress=新Uri(_配置[“SharePointConfiguration:WebSiteUrl]”);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded”);
httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,accessToken);
var response=wait httpClient.GetAsync(“\u api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f |成员资格|mellafi@naxxum.fr'");
var finalData=wait response.Content.ReadAsStringAsync();
var_dataResponse=JToken.Parse(JsonConvert.SerializeObject(finalData));
UserSharePointViewModel userResult=新的UserSharePointViewModel()
{
AccountName=\u dataResponse[“AccountName”]。ToString(),
Email=\u dataResponse[“Email”].ToString(),
DisplayName=\u dataResponse[“PersonalUrl”]。ToString(),
Picture=\u dataResponse[“PictureUrl”].ToString()
};
返回用户结果;
}
}
此函数返回以下错误:

您可以执行以下操作:

private static readonly HttpClient httpcLient = new HttpClient();
public async Task<UserSharePointViewModel> GetUserProfilInfoFromSharePoint()
{
    string accessToken = await GetAccessToken();    
    httpClient.BaseAddress = new Uri(_configuration["SharePointConfiguration:WebSiteUrl"]);
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
    var response = await httpClient.GetAsync("url");

    var finalData = await response.Content.ReadAsStringAsync();
    var _dataResponse = JsonConvert.DeserializeObject<UserSharePointViewModel>(finalData));

    UserSharePointViewModel userResult = new UserSharePointViewModel()
    {
        AccountName = _dataResponse.AccountName,
        Email = _dataResponse.Email,
        DisplayName = _dataResponse.PersonalUrl,
        Picture = _dataResponse.PictureUrl
    };
    return userResult;

}  
private static readonly HttpClient HttpClient=new HttpClient();
公共异步任务GetUserProfilInfoFromSharePoint()
{
字符串accessToken=等待GetAccessToken();
httpClient.BaseAddress=新Uri(_配置[“SharePointConfiguration:WebSiteUrl]”);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded”);
httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,accessToken);
var response=wait httpClient.GetAsync(“url”);
var finalData=wait response.Content.ReadAsStringAsync();
var_dataResponse=JsonConvert.DeserializeObject(finalData));
UserSharePointViewModel userResult=新的UserSharePointViewModel()
{
AccountName=\u dataResponse.AccountName,
Email=\u dataResponse.Email,
DisplayName=\u dataResponse.PersonalUrl,
Picture=\u dataResponse.PictureUrl
};
返回用户结果;
}  
顺便说一句,您不应该像使用HTTP一样使用它,HttpClient应该是静态的并且可以重复使用,您不应该对HttpClient使用“using”。 查看此链接以了解更多信息:

首先将“finalData”反序列化为其对应的对象(UserSharePointResponse),然后转换为UserSharePointViewModel将是一件轻而易举的事情。我还将
任务
更改为
任务
(但不是必需的)

public async Task/*Task*/getuserprofilinfofromfromsharepoint()
{
字符串accessToken=等待GetAccessToken();
使用(var httpClient=new httpClient())
{
httpClient.BaseAddress=新Uri(_配置[“SharePointConfiguration:WebSiteUrl]”);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded”);
httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,accessToken);
var response=wait httpClient.GetAsync(“\u api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f |成员资格|mellafi@naxxum.fr'");
var finalData=wait response.Content.ReadAsStringAsync();
//var_dataResponse=JToken.Parse(JsonConvert.SerializeObject(finalData));
var\u dataResponse=JsonConvert.DeserializeObject(finalData);
UserSharePointViewModel userResult=新的UserSharePointViewModel()
{
AccountName=\u dataResponse.AccountName,
Email=\u dataResponse.Email,
DisplayName=\u dataResponse.PersonalUrl,
Picture=\u dataResponse.PictureUrl
};
//返回用户结果;
返回Json(userResult,JsonRequestBehavior.AllowGet);
}
}
公共类UserSharePointResponse
{
公共字符串PersonalUrl{get;set;}
公共字符串AccountName{get;set;}
公共字符串电子邮件{get;set;}
公共字符串PictureUrl{get;set;}
}

您是否尝试过
JsonConvert.DeserializeObject(finalData)?可能propname不匹配,但您可以对Json-Attributes进行Delfine;如何访问AccountName之类的特定参数?Izzy是对的,您应该反序列化整个内容,而不是使用JToken。还要执行
Console.WriteLine(finalData)
以查看响应并确保它是正确的json.json是字符串。响应已经是一个字符串。最多,
JsonConvert.SerializeObject(finalData)
将在响应周围添加一对额外的引号,
JToken.Parse
将返回一个值仅为原始字符串的实体。您不会将字符串转换为JSON,而是使用
JsonConvert.DeserializeObject
将JSON字符串转换为对象,谢谢!但是我的http响应不会返回UserSharePointViewModel类型的对象。我想从这个响应中得到一些字段的值,并将它们分配到UserSharePointViewModel DTO中。您能提供一个从服务器得到的响应的示例吗?
public async Task<JsonResult> /*Task<UserSharePointViewModel>*/ GetUserProfilInfoFromSharePoint()
{
    string accessToken = await GetAccessToken();

    using (var httpClient = new HttpClient())
    {
        httpClient.BaseAddress = new Uri(_configuration["SharePointConfiguration:WebSiteUrl"]);
        httpClient.DefaultRequestHeaders.Accept.Clear();
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        var response = await httpClient.GetAsync("_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|mellafi@naxxum.fr'");


        var finalData = await response.Content.ReadAsStringAsync();
        //var _dataResponse = JToken.Parse(JsonConvert.SerializeObject(finalData));
        var _dataResponse = JsonConvert.DeserializeObject<UserSharePointResponse>(finalData);
    
        UserSharePointViewModel userResult = new UserSharePointViewModel()
        {
            AccountName = _dataResponse.AccountName,
            Email = _dataResponse.Email,
            DisplayName = _dataResponse.PersonalUrl,
            Picture = _dataResponse.PictureUrl
        };
        //return userResult;
        return Json(userResult, JsonRequestBehavior.AllowGet);
    }
}

public class UserSharePointResponse
{
    public string PersonalUrl { get; set; }
    public string AccountName { get; set; }
    public string Email { get; set; }
    public string PictureUrl { get; set; }
}