【问题标题】:xamarin forms HttpClient incomplete Jsonxamarin 形成 HttpClient 不完整的 Json
【发布时间】:2019-07-30 09:18:08
【问题描述】:

我创建了一个简单的服务器应用程序,它将一个 json 数组发送到客户端。 在我的 xamarin 应用程序中,我每 500 毫秒得到一次。但有时(这些事件完全随机)json 中缺少单个字符(数组的结尾 ])。所以我无法将json 字符串反序列化为object。我已经在控制台应用程序中测试了我的代码,它运行良好,没有任何问题。

这里是http请求的代码:

public static async Task<T> Put<T>(string url,object data)
{
    var content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
    var response = await client.PutAsync(url,content);

    response.EnsureSuccessStatusCode();

    string str = await response.Content.ReadAsStringAsync();
    Debug.WriteLine(str);
    return JsonConvert.DeserializeObject<T>(str);
}

public static async Task<T> Get<T>(string url)
{
    var response = await client.GetAsync(url);

    response.EnsureSuccessStatusCode();
    string str = await response.Content.ReadAsStringAsync();

    Debug.WriteLine(str);
    return JsonConvert.DeserializeObject<T>(str);
}

这是发送实际请求的代码:

Models.Position pos = await Network.Put<Models.Position>("positions/set", new { longitude = l.Longitude, latitude = l.Latitude });
List<Models.Position> positions = await Network.Get<List<Models.Position>>("positions");

【问题讨论】:

  • 也许专注于修复发送畸形 JSON 的服务器?这肯定是最简单的解决方法。
  • @DavidG 正如我在服务器响应正常之前所说的那样。我已经在控制台应用程序中对其进行了测试。
  • 我也会检查服务器端。首先要注意的是包含换行符 \x000a 的字符串在传输层上扩展为 CRLF \x000d\x000a,这将丢弃在服务器端计算的 Content-Length。客户端将读取 Content-Length 八位字节并在您的最后一个 ] 字符之前停止。
  • @AlwaysLearning 服务器使用 laravel 并返回这个 return response()->json(Position::where('last_updated','>',Carbon::now()->subMinutes(30) )->get(),200);
  • 从请求末尾随机删除单个字符是非常不寻常的。 HTTP 是一个非常健壮的协议,如果传输出现问题,HttpClient 几乎肯定会给您带来非常不同的错误。所以要么: 1 - 服务器正在发送错误数据,您需要修复它; 2 - 你的客户端代码做错了(这段代码很好,不会给你这个问题);或 3 - 您错误地删除了最后一个字符,只有您自己才能弄清楚。

标签: c# json xamarin xamarin.forms


【解决方案1】:

感谢 DavidG 和 AlwaysLearning 坚持认为问题出在服务器端,我将服务器从 laravel artisan 更改为 xampp,问题得到解决。如果是行尾,我仍然无法理解问题所在,它不应该在随机时间发生。 但它现在在 xampp 上运行没有任何问题。

【讨论】:

    猜你喜欢
    • 2017-05-07
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多