【问题标题】:Deserializing JSON from RestSharp response从 RestSharp 响应反序列化 JSON
【发布时间】:2020-02-04 11:52:53
【问题描述】:

我正在接收来自此 API 网页 (https://flagrantflop.com/api/endpoint.php?api_key=13b6ca7fa0e3cd29255e044b167b01d7&scope=team_stats&season=2019-2020&season_type=regular&team_name=Atlanta%20Hawks) 的 JSON 结果

使用 RestSharp 库,到目前为止我得到了这个:

var client = new RestClient("https://flagrantflop.com/api/endpoint.php?api_key=13b6ca7fa0e3cd29255e044b167b01d7&scope=team_stats&season=2019-2020&season_type=regular&team_name=");

var request = new RestRequest("Atlanta Hawks", DataFormat.Json);

var response = client.Get(request);

我已经测试了指定团队的 URL 和请求部分,并且两者都可以工作。

我知道有许多反序列化 JSON 的方法,但不确定最好的方法。

【问题讨论】:

  • 使用 json2csharp.com 之类的东西从 JSON 生成 C# 类。然后使用 Newtonsoft JSON.NET 将响应反序列化到该类中
  • @史蒂夫干杯。我已经实现了该类,但是在执行 RootObject data = JsonConvert.DeserializeObject<RootObject>(response); 时,我被告知我无法将 IRestResponse 转换为字符串。并将 .Content 添加到响应中会给我错误“解析值时遇到意外字符”。我认为 JSON 进来可能有错误?但是在网页上看起来不错
  • 类似:client.Execute(request, (response) => { RootObject data = JsonConvert.DeserializeObject<RootObject>(response.Content); }); 虽然您可能想在调用之外声明 RootObject。
  • 或者RootObject data = JsonConvert.DeserializeObject<RootObject>(response.Content);
  • 或者更简单地看这个答案:stackoverflow.com/questions/47429596/…

标签: c# json restsharp json-deserialization


【解决方案1】:

请求不起作用,因为您在 RestRequest 中提供的参数被视为源自基本 URI 的自己的页面。

您可以通过使用当前设置调用 client.BuildUri(request) 来验证这一点——您会看到解析的 URL 是 https://flagrantflop.com/api/Atlanta Hawks,这就是您没有得到正确 JSON 响应的原因。我建议像这样重写请求,但是有other valid ways

var client = new RestClient("https://flagrantflop.com/api/")
    .AddDefaultQueryParameter("api_key", "13b6ca7fa0e3cd29255e044b167b01d7")
    .AddDefaultQueryParameter("scope", "team_stats")
    .AddDefaultQueryParameter("season", "2019-2020")
    .AddDefaultQueryParameter("season_type", "regular");

var request = new RestRequest("endpoint.php")
    .AddQueryParameter("team_name", "Atlanta Hawks");

之后,您可以让 RestSharp 自动反序列化您的响应:

RootObject response = client.Get<RootObject>(request);

默认情况下,这使用 SimpleJson 反序列化您的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多