Javaで書かれたクラスと、C#で書かれた同じクラスがあります。C#クラスをjson文字列にシリアル化し、Java側で逆シリアル化しようとしています。両方のクラスにbyte[]フィールドを追加するまで、すべてうまくいきました。クラスの定義は次のとおりです。C#:
public class RegisterRequest : GenericRequest
{
public string name { set; get; }
public string sex { set; get; }
public string birthday { set; get; }
public string from { set; get; }
public string about { set; get; }
public byte[] image { set; get; }
}
Java:
public class RegisterRequest extends GenericRequest{
private String name;
private String sex;
private String birthday;
private String from;
private String about;
private String pictureUrl;
private byte[] image;
}
C#側のシリアル化でrequest.ToJson()
は、(Json.NET)を使用し、Javaの逆シリアル化では、(GsonRegisterRequest rr = gsonObject.fromJson(msg, RegisterRequest.class);
を使用します。msgはjson文字列です)を使用します。
バイト配列に何も送信しなくても、機能します。しかし、配列を埋めると、Java側で例外が発生します。com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 159089
Gsonが識別する配列の始まりを示すものが必要だと思いますが、Json.NETは文字列に追加しませんか?