Gson:如果序列化/反序列化目标是一个Object,有没有办法保存类型信息

时间:2013-10-22 16:46:20

标签: java serialization gson

我有以下代码

import com.google.gson.Gson;

/**
 *
 * @author yccheok
 */
public class JavaApplication18 {

    public static class Holder {
        public Object value;
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Gson gson = new Gson();
        Integer i = new Integer(123);

        Holder holder = new Holder();
        holder.value = i;

        String json = gson.toJson(holder);
        System.out.println(json);
        Holder newHolder = gson.fromJson(json, Holder.class);

        System.out.println(newHolder.value.getClass());
    }
}

输出

{"value":123}
class java.lang.Double

我希望Gson在对象类型上执行序列化/反序列化时可以保留类型信息。有没有任何优雅的方式来实现这一目标?或者,这是不可能的?

2 个答案:

答案 0 :(得分:0)

试试这种方式

   JsonObject  element = gson.fromJson (json, JsonObject.class);
    if(element.get("value") instanceof JsonPrimitive   )
            System.out.println("true");
    else
         System.out.println("false");

答案 1 :(得分:0)

JSON只有一种数字类型;它从JavaScript复制Number类型,此类型与Java Double类型具有相同的值。

您必须通过使用value变量的更具体类型或其他形式的显式类型匹配,向Gson解析器提供更多显式信息。