编写反序列化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;
- }
- }
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类中调用测试下
- <pre class="java" name="code"></pre><pre class="java" name="code">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");
- }
- }
- </pre><br><br>