Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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# 运行json代码时出错,代码将无法转换_C#_Json_Asp.net Mvc_System.text.json - Fatal编程技术网

C# 运行json代码时出错,代码将无法转换

C# 运行json代码时出错,代码将无法转换,c#,json,asp.net-mvc,system.text.json,C#,Json,Asp.net Mvc,System.text.json,由于某种原因,api数据没有转换为C#对象。我的IDE没有发作。它只在我运行时抛出一个错误 using System.Collections.Generic; using System.Net.Http; using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using pdrake.Models; namespace pdrake.Controllers { publ

由于某种原因,api数据没有转换为C#对象。我的IDE没有发作。它只在我运行时抛出一个错误

using System.Collections.Generic;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using pdrake.Models;

namespace pdrake.Controllers
{
    public class MovieController : Controller
    {
        private string baseUrl = "https://api.themoviedb.org/3/discover/movie?api_key=my_key&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1";
        public List<MovieResults> MovieList = new List<MovieResults>();
        public async Task<IActionResult> GetMovies()
        {
            using (HttpClient httpClient = new HttpClient())
            {
                var apiResponse = await httpClient.GetAsync(baseUrl);
                string apiData = await apiResponse.Content.ReadAsStringAsync();
                MovieList = JsonSerializer.Deserialize<List<MovieResults>>(apiData);
                ViewBag.Movie = MovieList;
                return View();
            }
        }
    }
}
使用System.Collections.Generic;
使用System.Net.Http;
使用System.Text.Json;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用pdrake.Models;
命名空间pdrake.Controllers
{
公共类电影控制器:控制器
{
专用字符串baseUrl=”https://api.themoviedb.org/3/discover/movie?api_key=my_key&language=en-美国&sort\u by=popularity.desc&include\u成人=false&include\u视频=false&page=1“;
public List MovieList=新列表();
公共异步任务GetMovies()
{
使用(HttpClient HttpClient=new HttpClient())
{
var apiResponse=wait-httpClient.GetAsync(baseUrl);
string apiData=await apiResponse.Content.ReadAsStringAsync();
MovieList=JsonSerializer.Deserialize(apiData);
ViewBag.Movie=MovieList;
返回视图();
}
}
}
}

将您的返回语句更改为

return Ok(MovieList):
你应该仔细阅读IActionResult

更新

您遇到的问题是正在反序列化的数据。您需要执行以下操作才能使其正常工作。。这就是原因

您得到的响应是以下json:

{
  "page": 1,
  "results": [ 
    {
      "adult": false,
      "backdrop_path": "/tYkMtYPNpUdLdzGDUTC5atyMh9X.jpg",
      "genre_ids": [
        28,
        53,
        80,
        18
      ],
      "id": 553604,
      "original_language": "en",
      "original_title": "Honest Thief",
      "overview": "A bank robber tries to turn himself in because he's falling in love and wants to live an honest life...but when he realizes the Feds are more corrupt than him, he must fight back to clear his name.",
      "popularity": 2431.379,
      "poster_path": "/zeD4PabP6099gpE0STWJrJrCBCs.jpg",
      "release_date": "2020-09-03",
      "title": "Honest Thief",
      "video": false,
      "vote_average": 7,
      "vote_count": 244
    }, {} ... ],
  "total_Pages": 500,
  "total_results": 10000
}
您正在反序列化的响应是一个对象,其中包含“results”属性中的电影列表。将以下内容用作类以使其正常工作

public class RootObject 
{
  [JsonProperty("page")]
  public int Page {get;set;}

  [JsonProperty("results")]
  public List<MovieTitle> Results {get;set;}

  [JsonProperty("total_pages")]
  public int TotalPages {get;set;}
 
  [JsonProperty("total_results")]
  public int TotalResults {get;set;}  
}

public class MovieTitle 
{
  [JsonProperty("adult")]
  public bool IsAdult {get;set;}
  
  [JsonProperty("original_title")]
  public string OriginalTitle {get;set;}

  ... // you can fill in the rest here
}
公共类根对象
{
[JsonProperty(“第页”)]
公共整型页{get;set;}
[JsonProperty(“结果”)]
公共列表结果{get;set;}
[JsonProperty(“总页数”)]
公共整型TotalPages{get;set;}
[JsonProperty(“总结果”)]
公共整数TotalResults{get;set;}
}
公共级电影
{
[JsonProperty(“成人”)]
公共bool IsAdult{get;set;}
[JsonProperty(“原始产权”)]
公共字符串源代码{get;set;}
…//剩下的你可以在这里填
}
反序列化将在rootObject级别进行

var rootObject = JsonSerializer.Deserialize<RootObject>(apiData);
var movieList = rootObject.Results;
return Ok(movieList);
var rootObject=JsonSerializer.Deserialize(apiData);
var movieList=rootObject.Results;
返回Ok(电影列表);

@pdrake1988如果这没有帮助,那么获取JSON值时会出现什么错误?无法将JSON值转换为system.collections.generic.list谢谢您的帮助,我非常感谢it@pdrake1988在反序列化之前,请使用调试器查看apiData的字符串值。。。我的假设是您的密钥无效