2017-08-08 114 views
1

我在基于使用Java编写的服务器的.NET Core中编写服务器。在.NET的核心,我有:JSON.NET中的Flush()无法按预期方式工作

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"。什么可能是错误的?

+2

难道你不需要调用writer.WriteEndArray()? –

+0

@PalleDue是和两个代码都是这一行,但在writer.flush之后。即使我之前写过,通过我调试同样的错误:java.io.IOException:不完整的文档。 – Nju

回答

0

解决方案很难找到。但整个昨天我花了调试器,我发现一个问题。在Java客户端我看着什么是“结果”和“jsonReader”:

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

,我想通了,jsonReader的缓冲区看起来像[{“成功”:真正} 和结果的缓冲像[{“成功” :false}执行完该行后。为什么?因为模型Result在Java中具有字段调用“成功”而不是“成功”。并对.net核心结果类我刚刚添加

[JsonProperty("success")] 

和问题消失:)也许它有助于某人一天。

+0

看看JsonSerializerSettings,你可以将它配置为自动camelCase属性。 – john

相关问题