【问题标题】:Flush() from JSON.NET does not work as expectedJSON.NET 中的 Flush() 无法按预期工作
【发布时间】:2017-08-08 10:02:39
【问题描述】:

我在 .NET Core 中基于用 Java 编写的服务器编写服务器。在 .net 核心中,我有:

JsonSerializer serializer = new JsonSerializer();
JsonWriter writer = new JsonTextWriter(OutputStream);
writer.WriteStartArray();
serializer.Serialize(writer, result); //result = [{ "Success": true}
writer.Flush(); //Java client received message and generate error: Incomplete document

在 java 中,服务器代码如下所示:

Json Writer writer = new JsonWriter(new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")));
writer.beginArray();
Result result = new Result();
gson.toJson(result, Result.class, writer);
writer.flush(); //Java client still waiting 

和产生错误的Java客户端:

jsonReader.beginArray();
result = gson.fromJson(jsonReader, Result.class);

在 Java 中,一切正常,但在 .net 核心中却不行。我已经通过 Wireshark 检查了数据包,并且所有内容都已发送。当我调试客户端时出现错误:"Incomplete document", java.io.IOException: Incomplete document"。有什么问题?

【问题讨论】:

  • 不需要调用 writer.WriteEndArray() 吗?
  • @PalleDue 是的,在这两个代码中都是这一行,但在 writer.flush 之后。即使我以前写过这个,调试器也会出现同样的错误:java.io.IOException: Incomplete document.

标签: java c# android json .net-core


【解决方案1】:

很难找到解决方案。但是整个昨天我都在调试器上度过,我发现了一个问题。在 java 客户端中,我查看了“结果”和“jsonReader”中的内容:

result = gson.fromJson(jsonReader, Result.class);

我发现 jsonReader 的缓冲区看起来像 [{ "Success": true} 和结果的缓冲区,如 [{ "success": false} 在执行该行之后。为什么?因为模型结果有字段调用“成功”,而不是 Java 中的“成功”。我刚刚添加到 .net core Result 类

[JsonProperty("success")]

问题消失了 :) 也许有一天它会帮助某人。

【讨论】:

  • 看JsonSerializerSettings,可以配置成自动camelCase属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2014-12-09
  • 2016-01-13
  • 2020-09-21
  • 2011-08-17
  • 2012-04-29
  • 2021-08-12
相关资源
最近更新 更多