【问题标题】:Read Json from response and convert it to Json Object [duplicate]从响应中读取 Json 并将其转换为 Json 对象 [重复]
【发布时间】:2017-01-05 17:18:33
【问题描述】:

所以我正在从 ASP.NET 核心应用程序调用 Web API。我使用 HttpClient 并将其作为字符串读取,但我想将其作为 JSON 对象读取。我知道您可以将其读取为 Generic class ReadAsAsync<Generic>(); 但是,返回的对象是一个巨大的 JSON 对象,为它编写一个 Generic 类需要做很多工作。我的问题是我怎样才能将它作为它的 JSON 对象读取?

    public async Task<IActionResult>  SendRequest()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(" https://api.forecast.io/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // HTTP GET
            HttpResponseMessage response = await client.GetAsync("forecast/KEY/");
            if (response.IsSuccessStatusCode)
            {
                var forcast = await response.Content.ReadAsStringAsync();
                Console.WriteLine("{0}", forcast);
                // return Json( JSON ) ; 
            }
        }
        // return Json( JSON ) ; 
    }

我看到了三种响应阅读器,其中任何一种都可以成为 JSON 对象吗?

ReadAsByteArrayAsync, ReadAsStreamAsync, ReadAsStringAsync

【问题讨论】:

  • 请澄清:您是说forecast/KEY/ 已经返回 JSON 格式的文本,而您正试图弄清楚如何将其作为 JSON 格式的文本传递回 Action 方法的调用者?如果是这样,请参阅此相关问题:stackoverflow.com/questions/18409863/…
  • @stephen.vakil 我正在尝试将其作为 JSON 对象读取,或者我猜想将字符串转换为 JSON 对象。
  • JSON object 是什么意思?根据注释掉的代码,您似乎希望您的操作按原样返回 JSON,以便 javascript 调用者可以使用它,在这种情况下,请使用我提供的链接中的代码,它将采用字符串由 forecast.io 返回并以 JSON 格式返回。如果您的意思是,您想在返回之前将其作为对象进行操作,那么请参阅下面的答案。
  • 哦,我现在明白了。是的,这就是我想要做的。那么它应该看起来像这样 [ return Json(forecast, "application/json") ] 吗?
  • 可能是return Content(forcast, "application/json")

标签: c# asp.net json asp.net-web-api asp.net-core


【解决方案1】:

【讨论】:

  • 太棒了,谢谢!!!我是linux用户,没有NuGet怎么添加?
  • 它也适用于 linux。只需将其添加到 project.json 文件中即可。
  • 它说:“对象”类型是在未引用的程序集中定义的。您必须添加对程序集“mscorlib,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e,Retargetable=Yes”的引用。 [netcoreapp1.0]
  • 在您的原始帖子中分享 project.json 文件
【解决方案2】:

您可以尝试将您的 JSON 有效负载解析为 JObject,这实际上允许您使用 LINQ to JSON。

来自here的示例代码:

JObject o = JObject.Parse(@"{
   'CPU': 'Intel',
   'Drives': [
     'DVD read/writer',
     '500 gigabyte hard drive'
  ]
}");

string cpu = (string)o["CPU"];
// Intel

string firstDrive = (string)o["Drives"][0];
// DVD read/writer

IList<string> allDrives = o["Drives"].Select(t => (string)t).ToList();
// DVD read/writer
// 500 gigabyte hard drive

从技术上讲,这更适合您不希望 POCO 代表您的有效负载的情况。

而 Json.net 4.0+ 实际上也允许您使用动态实例:

dynamic jsonResponse = JsonConvert.DeserializeObject("{\"message\":\"Hi\"}");
jsonResponse.Works = true;
Console.WriteLine(jsonResponse.message); // Hi
Console.WriteLine(jsonResponse.Works); // True
Console.WriteLine(JsonConvert.SerializeObject(jsonResponse)); // {"message":"Hi","Works":true}
Assert.That(jsonResponse, Is.InstanceOf<dynamic>());
Assert.That(jsonResponse, Is.TypeOf<JObject>());

查看更多关于此here

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 2020-08-12
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多