2017-08-08 84 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

相關問題