【问题标题】:How do I resolve a JSON response of special characters?如何解决特殊字符的 JSON 响应?
【发布时间】:2017-10-30 14:41:21
【问题描述】:

如何解决特殊字符的 JSON 响应?

当我将 Postman 工具与此 URL 一起使用时,我会收到有效且预期的 JSON。

但是,当我在 .Net 中使用此 URL 发出 HTTP 请求时,我会收到包含特殊字符的响应。

代码如下:

    let url =      String.Format(TagsUrl, pageNumber |> string)
    let client =   httpClient APIBaseAddress
    let response = client.GetAsync(url) |> Async.AwaitTask 
                                        |> Async.RunSynchronously

   if response.IsSuccessStatusCode
         then let json =   response.Content.ReadAsStringAsync() |> Async.AwaitTask |> Async.RunSynchronously
              let result = JsonConvert.DeserializeObject<Response>(json)
              let tags =   result.items |> List.ofSeq 
                                        |> List.map (fun i -> i.name)
              tags
         else []

我也尝试以字节数组的形式读取响应,但结果相同:

let url =      String.Format(TagsUrl, pageNumber |> string)
let client =   httpClient APIBaseAddress
let response = client.GetByteArrayAsync(url) |> Async.AwaitTask 
                                             |> Async.RunSynchronously

let json = Encoding.UTF8.GetString(response);

let result = JsonConvert.DeserializeObject<Response>(json)

附录:

[<Literal>]
let TagsUrl = "2.2/tags?page={0}&order=desc&sort=popular&site=stackoverflow&filter=!-.G.68grSaJm"

[<Literal>]
let APIBaseAddress = "https://api.stackexchange.com/"

type Item =     { name : string }
type Response = { items: Item list }

【问题讨论】:

标签: json f# httpwebrequest dotnet-httpclient stackexchange-api


【解决方案1】:

您可以使用the F# Data library 中的Http 实用程序。以下对我有用:

Http.RequestString
  ( "https://api.stackexchange.com/2.2/tags" + 
    "?page=1&order=desc&sort=popular&site=stackoverflow&filter=!-.G.68grSaJm")

【讨论】:

  • 啊,不,这恐怕还没有.NET核心版本。
猜你喜欢
  • 2014-06-06
  • 2010-11-30
  • 2021-06-25
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多