2011-11-17 25 views
4

我的班级是这样的:GSON定制反序列化逻辑

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是“162cm”

这可能使用Gson吗?

谢谢!

+0

“反序列化”下的含义是什么? –

+0

我的意思是,Foo foo = gson.fromJson(...) – smilingcoder

回答

6

GSON允许创建自定义的解串器/串行器。尝试阅读here

对不起,没有一个例子。

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(...)得到你应该得到的结果。

+0

是的,在该文档中,自定义反序列化程序def基于数据类型,在上面的示例中,两个字段类型均为String,但我需要基于不同的反序列化逻辑在字段名称上。 – smilingcoder

+0

检查编辑的答案。 – 87element

+0

太棒了!这应该工作。谢谢! – smilingcoder