2016-03-22 5 views
1

私はデータモデルの一部としてenumを使用しています。入力jsonを逆シリアル化すると、データモデルの列挙型にデータが格納されません。春のデータでeNumを処理できません

アドバイスをお願いしますか?

public enum AccessTypeEnum {

PUBLIC(1, "public"), 
PRIVATE(2, "private"), 

private int code; 
private String accessType; 

private AccessTypeEnum(int code, String accessType) { 
    this.code = code; 
    this.accessType = accessType; 
} 

public String getAccessType() { 
    return accessType; 
} 

public int getCode() { 
    return code; 
} 

}

私inputJsonは

{ "accessType":"public" }

あなたはすべてのenumフィールドに注釈 "SerializedName" を追加する必要があり

AccessTypeEnum e = gson.fromJson(inputJson, AccessTypeEnum.class);

答えて

1

をデシリアライズするためです。注釈のドキュメントはこちらです:https://google.github.io/gson/apidocs/com/google/gson/annotations/SerializedName.html

あなたの列挙型が

import com.google.gson.annotations.SerializedName; 

public enum AccessTypeEnum {  
    @SerializedName("public") PUBLIC(1, "public"), 
    @SerializedName("private") PRIVATE(2, "private"), 

    private int code; 
    private String accessType; 

    private AccessTypeEnum(int code, String accessType) { 
     this.code = code; 
     this.accessType = accessType; 
    } 

    public String getAccessType() { return accessType; } 
    public int getCode() { return code; } 
} 

なども、あなたが列挙型をデシリアライズすることができないことに、注意してくださいあなたはラッパーオブジェクトを使用する必要があり、次のようになります。

class MyObj { 
    AccessTypeEnum accessType; 
} 

public static final void main(String args[]) { 
    MyObj obj = new Gson().fromJson("{ \"accessType\": \"public\" }", MyObj.class); 
    System.out.println("" + obj.accessType); 
} 
+0

ありがとうございました –

+0

私の答えを受け入れると、私は感謝します。回答を受け入れることについてのすべての情報は、参照用にここにあります:http://meta.stackexchange.com/a/5235 –

関連する問題