2017-08-08 15 views
1

Javaで書かれたサーバーに基づいて.NETコアにサーバーを書きます。私が持っているネットコアで:JSON.NETのFlush()が期待どおりに動作しない

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クライアント:Javaで

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では

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

、すべてが、動作しますしかし、ネットのコアではありません。私は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}行を実行した後。なぜ?モデル結果には、Javaでは「Success」ではなく「success」というフィールド呼び出しがあるためです。そして、.netのコア結果クラスに追加しました。

[JsonProperty("success")] 

問題は消えました。多分誰かを助けるかもしれません。

+0

JsonSerializerSettingsを見て、camelCaseのプロパティを自動的に設定することができます。 – john

関連する問題