Пользовательская десериализационная логика Gson на основе имени поля - PullRequest
4 голосов
/ 17 ноября 2011

Мой класс выглядит так:

class Foo {
   public String duration;
   public String height;
}

И мои данные JSON выглядят как

{"duration":"12200000", "height":"162"}

Теперь я хочу десериализовать их как

 Foo foo = gson.fromJson(jsonStr, Foo.class);

, foo.duration - «20 минут» (количество минут), foo.height - «162 см»

Возможно ли это сделать с помощью Gson?

Спасибо!

1 Ответ

6 голосов
/ 17 ноября 2011

GSON позволяет создавать собственные десериализаторы / сериализаторы. Попробуйте прочитать здесь .

Извините за без примера.

class FooDeserializer implements JsonDeserializer<Foo>{
   @Override
   public Foo deserialize(JsonElement json, Type typeOfT,
   JsonDeserializationContext context) throws JsonParseException {

    JsonObject jo = (JsonObject)json;
    String a = jo.get("duration").getAsString()+" mins";
    String b = jo.get("height").getAsString() + " cm";

//Should be an appropriate constructor
    return new Foo(a,b);
    }               
}

, то:

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, foo.new FooDeserializer()).create();

и вы должны получить результат, как хотите, чтобы он использовал fromJson(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...