/ / Ako vyriešim odpoveď JSON špeciálnych znakov? - json, f #, httpwebrequest, dotnet-httpclient, stackexchange-api

Ako môžem vyriešiť odpoveď JSON špeciálnych znakov? - json, f #, httpwebrequest, dotnet-httpclient, stackexchange-api

Ako vyriešim odpoveď JSON špeciálnych znakov?

Keď s tým použijem nástroj Postman URL, Dostávam platný a očakávaný JSON.

Keď však urobím požiadavku HTTP s touto adresou URL v rámci .Net, dostanem odpoveď špeciálnych znakov.

Kód je nasledujúci:

    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 []

Skúsil som tiež prečítať odpoveď ako bajtové pole, ale s rovnakým výsledkom:

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)

Príloha:

[<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 }

odpovede:

1 pre odpoveď č. 1

Môžete použiť Http užitočnosť od knižnica dát F #. Nasledujúci trik robí pre mňa:

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