【问题标题】:Transfering Json data to C# list将 Json 数据传输到 C# 列表
【发布时间】:2020-12-19 04:22:28
【问题描述】:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using pdrake.Models;

namespace pdrake.Controllers
{
    public class MovieApiController : Controller
    {
        private const string baseUrl = "https://api.themoviedb.org/3/discover/movie?api_key=my_key";
        public List<Movie> Movies { get; set; }
        public async Task<AcceptedResult> GetMovies()
        {
            using (var httpClient = new HttpClient())
            {
                httpClient.BaseAddress = new Uri(baseUrl);
                httpClient.DefaultRequestHeaders.Accept.Clear();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            }
            Movies = JsonConvert.DeserializeObject<List<Movie>>(Json(baseUrl));
            return View(Movies);
        }
    }
}

我整天都在苦苦挣扎,试图弄清楚如何将 Json 从 baseUrl 转移到可以通过 foreach 循环循环的电影列表。

【问题讨论】:

  • 看起来您正在将原始 url 转换为 json...?

标签: c# json asp.net-mvc api


【解决方案1】:

将您的 using 块更改为以下内容,

using (var httpClient = new HttpClient())
{
    var response = await httpClient.GetAsync(baseUrl);
    string data = await response.Content.ReadAsStringAsync();
    return View(JsonConvert.DeserializeObject<List<Movie>>(data));
}

这将调用 baseUrl 并从响应中接收文本/内容。获得数据后,您可以将其反序列化为 List&lt;Movie&gt; 对象并将其作为视图返回。

【讨论】:

  • 我这样做了,但出现错误 cannot convert system.threading.tasks.task to string
  • 虽然HttpClient 实现了IDisposable,但在using 块中使用它是(反直觉地)错误的。 HttpClient 实例应该是长期存在的。在网上搜索解释
  • 代码在调用ReadAsStringAsync 时缺少await。这就是为什么您会收到 cannot convert 错误
  • 好的,但我仍然无法解析视图
  • 啊,我知道我错过了那部分。它已在答案中修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2012-01-17
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多