6

私は JSON-RPC クライアントのようなものを持っていますが、入ってくる json 文字列を Java オブジェクトに逆シリアル化するのに問題があります。着信 json 形式は次のとおりです。

{"value":"xxxx","type":"xxxx"}

逆シリアル化したいオブジェクト:

@JsonAutoDetect
@JsonDeserialize()
public class ReturnValue {

private Object value;
private String type;

@JsonCreator
public ReturnValue(@JsonProperty("value") String val, @JsonProperty("type") String type) {
    value = val;
    this.type = type;
}

...getters, setters...

値が文字列の場合、これはうまくいくようですが、配列型の場合は、JsonMapping Exception がスローされます。次のように、Json の START_ARRAY トークンから java.lang.String のインスタンスを逆シリアル化できません。

{\"value\":[8, 10], \"type\":\"[int]\"}

コードは次のとおりです。

int[] arr = (int[])getReturnValue(jsonString).getValue();

getReturnValue は特別なものではありません:

    ObjectMapper om = new ObjectMapper();
    ReturnValue rv = null;
    rv = om.readValue(json, ReturnValue.class);
    return rv;

もう 1 つの問題は、type プロパティを Class 型にしたいのですが、これにより別のマッピング例外がスローされることです。ジャクソンでそれを行う方法はありますか、それとも自分で文字列から適切なクラスに変換する必要がありますか? アドバイスありがとうございます。

4

1 に答える 1

8

コンストラクターを次のように変更します。

@JsonCreator
public ReturnValue(@JsonProperty("value") Object val, @JsonProperty("type") String type) {

エラーが指摘するように、配列から文字列を作成する方法がわからないためです。ただし、文字列と JSON 配列の両方をオブジェクトに変換できます。その場合、Java String、または Java List (JSON 配列の場合)、または Java Map (JSON オブジェクトの場合) になります。

于 2011-03-09T19:19:33.530 に答える