序列化反序列化

编写反序列化Adapter

  1. import com.google.gson.*;
  2. import com.google.gson.JsonDeserializer;
  3. import java.lang.reflect.Type;
  4. import java.math.BigDecimal;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. /**
  8. * Created by IntelliJ IDEA.
  9. * User: chuang.liu
  10. * Date: 11-7-22
  11. * Time: 上午10:24
  12. * To change this template use File | Settings | File Templates.
  13. */
  14. public class NaturalDeserializer implements JsonDeserializer<Object> {
  15. public Object deserialize(JsonElement json, Type typeOfT,
  16. JsonDeserializationContext context) {
  17. if(json.isJsonNull()) return null;
  18. else if(json.isJsonPrimitive()) return handlePrimitive(json.getAsJsonPrimitive());
  19. else if(json.isJsonArray()) return handleArray(json.getAsJsonArray(), context);
  20. else return handleObject(json.getAsJsonObject(), context);
  21. }
  22. private Object handlePrimitive(JsonPrimitive json) {
  23. if(json.isBoolean())
  24. return json.getAsBoolean();
  25. else if(json.isString())
  26. return json.getAsString();
  27. else {
  28. BigDecimal bigDec = json.getAsBigDecimal();
  29. // Find out if it is an int type
  30. try {
  31. bigDec.toBigIntegerExact();
  32. try { return bigDec.intValueExact(); }
  33. catch(ArithmeticException e) {}
  34. return bigDec.longValue();
  35. } catch(ArithmeticException e) {}
  36. // Just return it as a double
  37. return bigDec.doubleValue();
  38. }
  39. }
  40. private Object handleArray(JsonArray json, JsonDeserializationContext context) {
  41. Object[] array = new Object[json.size()];
  42. for(int i = 0; i < array.length; i++)
  43. array[i] = context.deserialize(json.get(i), Object.class);
  44. return array;
  45. }
  46. private Object handleObject(JsonObject json, JsonDeserializationContext context) {
  47. Map<String, Object> map = new HashMap<String, Object>();
  48. for(Map.Entry<String, JsonElement> entry : json.entrySet())
  49. map.put(entry.getKey(), context.deserialize(entry.getValue(), Object.class));
  50. return map;
  51. }
  52. }
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;
  }
}
  1. 在test类中调用测试下
  1. <pre class="java" name="code"></pre><pre class="java" name="code">import com.dev.core.user.model.User;
  2. import com.google.gson.*;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. /**
  6. * Created by IntelliJ IDEA.
  7. * User: chuang.liu
  8. * Date: 11-7-21
  9. * Time: 下午3:50
  10. * To change this template use File | Settings | File Templates.
  11. */
  12. public class test {
  13. private int data;
  14. private Map<String,Object> mapData;
  15. public void setData(int data){
  16. this.data =data;
  17. }
  18. public int getData(){
  19. return data;
  20. }
  21. public void setmapData(Map<String,Object> data){
  22. this.mapData =data;
  23. }
  24. public Map<String,Object> getmapData(){
  25. return mapData;
  26. }
  27. public static void main(String arg[]){
  28. GsonBuilder gsonBuilder = new GsonBuilder();
  29. gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
  30. Gson gson = gsonBuilder.create();
  31. Map<String, Object> data = new HashMap<String, Object>();
  32. data.put("user",new User());
  33. data.put("url", "http:///sina/verify?code=");
  34. test t =new test();
  35. t.setData(10);
  36. t.setmapData(data);
  37. String jstring = gson.toJson(t);
  38. test nt = gson.fromJson(jstring,test.class);
  39. System.out.println("done");
  40. }
  41. }
  42. </pre><br><br>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值