java - 我可以使用 Gson 来序列化方法本地类和匿名类吗?

标签 java gson

例子:

import com.google.gson.Gson;

class GsonDemo {

    private static class Static {String key = "static";}
    private class NotStatic {String key = "not static";}

    void testGson() {
        Gson gson = new Gson();

        System.out.println(gson.toJson(new Static()));
        // expected = actual: {"key":"static"}

        System.out.println(gson.toJson(new NotStatic()));
        // expected = actual: {"key":"not static"}

        class MethodLocal {String key = "method local";}
        System.out.println(gson.toJson(new MethodLocal()));
        // expected: {"key":"method local"}
        // actual: null  (be aware: the String "null")

        Object extendsObject = new Object() {String key = "extends Object";};
        System.out.println(gson.toJson(extendsObject));
        // expected: {"key":"extends Object"}
        // actual: null  (be aware: the String "null")        
    }

    public static void main(String... arguments) {
        new GsonDemo().testGson();
    }
}

我想要这些序列化,尤其是在单元测试中。有办法吗? 我找到了 Serializing anonymous classes with Gson , 但该论证仅对反序列化有效。

最佳答案

FWIW,Jackson将很好地序列化匿名类和本地类。

public static void main(String[] args) throws Exception
{
  ObjectMapper mapper = new ObjectMapper();

  class MethodLocal {public String key = "method local";}
  System.out.println(mapper.writeValueAsString(new MethodLocal()));
  // {"key":"method local"}

  Object extendsObject = new Object() {public String key = "extends Object";};
  System.out.println(mapper.writeValueAsString(extendsObject));
  // {"key":"extends Object"}
}

请注意,默认情况下,Jackson 不会像 Gson 那样通过反射访问非公共(public)字段,但可以将其配置为这样做。 Jackson 的方法是使用常规的 Java 属性(通过 get/set 方法)。 (将其配置为使用私有(private)字段确实会稍微降低运行时性能,但它仍然比 Gson 快得多。)

关于java - 我可以使用 Gson 来序列化方法本地类和匿名类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039670/

相关文章:

java - 使用PHP将文件从android(java)上传到服务器

java - 使用 Gson 动态解析 JSON 字段类型

java - 为什么在序列化内置类型时会忽略 JsonAdapter 注解?

int - Kotlin 数据类 Gson 序列化问题

java - 如何实现比较器以在 android 或 java 中对对象进行排序

java - 当列表达到一定数量时执行操作

java - 从 App Engine (Java) 中删除命名空间

java - 每次我尝试打开 eclipse 时都无法创建 java 虚拟机错误

java - 使用 Gson 将 json 放入列表中

java - 在 Retrofit baseUrl 中使用模拟器 ip 地址 10.0.2.2