【问题标题】:Gson : Is there a way to preserve type information if serialization/deserialization target is an ObjectGson:如果序列化/反序列化目标是一个对象,有没有办法保留类型信息
【发布时间】:2013-10-22 16:46:19
【问题描述】:

我有以下代码

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 在对 Object 类型执行序列化/反序列化时可以保留类型信息。有什么优雅的方法可以实现吗?或者,不可能?

【问题讨论】:

    标签: java serialization gson


    【解决方案1】:

    试试这个方法

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 您知道如何在不更改持有人值类型的情况下向 gson 提供更明确的信息吗?
      猜你喜欢
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多