您的位置:首页 > 移动开发 > Objective-C

Gson序列化与反序列化成员变量为Map<String,Object>的类对象

2011-07-22 18:09 801 查看
开发时遇到的问题,找到解决方案后记录下编写反序列化Adapter
import com.google.gson.*;
import com.google.gson.JsonDeserializer;

import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
* Created by IntelliJ IDEA.
* User: chuang.liu
* Date: 11-7-22
* Time: 上午10:24
* To change this template use File | Settings | File Templates.
*/
public   class NaturalDeserializer implements JsonDeserializer<Object> {
public Object deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) {
if(json.isJsonNull()) return null;
else if(json.isJsonPrimitive()) return handlePrimitive(json.getAsJsonPrimitive());
else if(json.isJsonArray()) return handleArray(json.getAsJsonArray(), context);
else return handleObject(json.getAsJsonObject(), context);
}
private Object handlePrimitive(JsonPrimitive json) {
if(json.isBoolean())
return json.getAsBoolean();
else if(json.isString())
return json.getAsString();
else {
BigDecimal bigDec = json.getAsBigDecimal();
// Find out if it is an int type
try {
bigDec.toBigIntegerExact();
try { return bigDec.intValueExact(); }
catch(ArithmeticException e) {}
return bigDec.longValue();
} catch(ArithmeticException e) {}
// Just return it as a double
return bigDec.doubleValue();
}
}
private Object handleArray(JsonArray json, JsonDeserializationContext context) {
Object[] array = new Object[json.size()];
for(int i = 0; i < array.length; i++)
array[i] = context.deserialize(json.get(i), Object.class);
return array;
}
private Object handleObject(JsonObject json, JsonDeserializationContext context) {
Map<String, Object> map = new HashMap<String, Object>();
for(Map.Entry<String, JsonElement> entry : json.entrySet())
map.put(entry.getKey(), context.deserialize(entry.getValue(), Object.class));
return map;
}
}
在test类中调用测试下
import com.dev.core.user.model.User;import com.google.gson.*;import java.util.HashMap;import java.util.Map;/*** Created by IntelliJ IDEA.* User: chuang.liu* Date: 11-7-21* Time: 下午3:50* To change this template use File | Settings | File Templates.*/public class test {private int data;private Map<String,Object> mapData;public void setData(int data){this.data =data;}public int getData(){return data;}public void setmapData(Map<String,Object> data){this.mapData =data;}public Map<String,Object> getmapData(){return mapData;}public static void main(String arg[]){GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());Gson gson = gsonBuilder.create();Map<String, Object> data = new HashMap<String, Object>();data.put("user",new User());data.put("url", "http:///sina/verify?code=");test t =new test();t.setData(10);t.setmapData(data);String jstring = gson.toJson(t);test nt = gson.fromJson(jstring,test.class);System.out.println("done");}}
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: