2016-08-02 9 views
2

私に渡されたjsonの1つのフィールドは、このjsonを逆シリアル化したいJavaオブジェクトのフィールド名とは異なります。Gson Deserialize:Jsonフィールド名がJavaオブジェクトフィールド名と異なる

Class MyClass { 
    String backpack; 
} 

{"bag": "LV"} 

をので、フィールドbackpackは、逆シリアル化後の値LVを持っている必要があります:私はデシリアライズするとします。

問題はMyClassですが、私は注釈を変更または追加できないライブラリからです。また、私に渡されたジョンソンを支配することもできません。私はGsonをどのように設定することができるのだろうか。その他のフィールドは完全に一致します。

+1

はカスタムデシリアライザを作成する必要がありますようだ - 幸いにも、正確についての議論があります(http://stackoverflow.com/questions/6096940/how- [GsonのカスタムJSONデシリアライザの書き方] do-i-write-a-custom-json-deserializer-for-gson) - これを打つと、これが役立つかどうか私たちに知らせてください。それはあなたが探しているもののように見えます。 – ishmaelMakitla

+0

ジャクソンに切り替えてミックスインを使用してください。 –

答えて

1
class CustomStrategy implements FieldNamingStrategy { 

    @Override 
    public String translateName(Field field) { 
     if (field.getName().equals("backpack")) { 
      return "bag"; 
     } 
     return field.getName(); 
    } 
} 

Gson gson = new GsonBuilder().setFieldNamingStrategy(new CustomStrategy()).create(); 
関連する問題