2017-12-18 21 views
-1

私はいくつかのフィールドとjsonオブジェクトを格納するstring型の余分なデータを持つクラスを持っています。私は、それが直列化復元されないようにしたいが、1時間以上探した後、私が見つけた唯一のものだった:jsonの逆シリアル化でオブジェクトを文字列として保持

@Expose(deserialize=false) 

しかし、それは動作しません。

次は一例です。

public class Employee implements Serializable 
{ 


    private static final long serialVersionUID = 1L; 

    @Expose 
    public Long id; 
    @Expose 
    public String name; 
    ... some more fields 

    @SerializedName("extraData") 
    @Expose(deserialize = false) 
    public String extraData; 



} 

その後、私のサービスに、私は次のようにします。

final GsonBuilder builder = new GsonBuilder(); 

    final Gson gson = builder.create(); 

    Employee emp = gson.fromJson(json, Employee.class); 

私はフロントエンドから受け付けており、オブジェクトがある:

{ 
"id":1, 
"name": "John Doe", 
"extraData": {"someField1":"someValue1","someField2":"someValue2"} 
} 

そして、私はこのエラーを受け取ります: java.lang.IllegalStateException:文字列を期待しましたが、行1列48パス$ .extraData

でBEGIN_OBJECT私はちょうどそれは私が与えられた仕様であるため、

{"someField1":"someValue1","someField2":"someValue2"} 

他の解決策が受け入れられない値で文字列として「extraData」を取得したいです。

+0

についてはどうですか? '' someField1 \ ":\" someValue1 \ "、\" someField2 \ ":\" someValue2 \ "}" ' –

答えて

1

あなたのようextraDataの種類を変更した場合には害はありません(それが可能であり、余分なデータは、あなたが説明したパターンを、以下の仮定)

public Map<String, String> extraData; 

とそれのStringを構成します。

なお、Jaron Fが提案したことは、全体的に改善された可能性があります。タイプアダプターを使用する場合はthis answer

関連する問題