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]
相关文章推荐
- java 后台使用gson 将json字符串转换为List<Map<String,object>> 数组
- json&jsonArray&gson&list&List<Map<String,Object>>&listview&adapter
- 【问题解决】Redis存储Hash-Map<String,Object>时无法序列化问题
- stirng转json,String转成List<Map<String,object>>,然后转成json
- Freemarker遍历map<String,Map<String,Object>>
- AutoCompleteTextView 自定义adapter。 可以添加List<Map<String,Object>>
- Android中List与Map<String,Object>及SimpleAdapter用来存储数据并展示出来的联合用法
- struts2 Map<String,Object>session心得 浅析
- Gson 解析Map<String ,Object>,数组
- Gson 反序列化Map<String, Object>类型的小问题
- List<Map<String, Object>>的循环
- fastJson如何序列化一个包含list对象的Map对象,如Map<String,List<T>>类型的对象
- 如何给List<Map<String, Object>> list 增加值和修改值
- javaBean与Map<String,Object>互转
- List<Map<String, Object>> 不同key值进行排序备忘
- <转> com.google.gson.internal.StringMap cannot be cast XXX(整理)
- list中依据map<String,Object>的某个值排序
- javaBean与Map<String,Object>互转
- android sharedpreferences 保存 list<Map<String,Object>>数据
- 去除List<Map<String,Object>>中的map中的重复值