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

Java 我可以使用Gson序列化方法本地类和匿名类吗?,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(g

例如:

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();
    }
}
我喜欢这些序列化,尤其是在单元测试中。有没有办法做到这一点? 我发现了,但是这个论证只对反序列化有效。

FWIW,将匿名类和本地类序列化就可以了

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那样通过反射访问非公共字段,但可以将其配置为这样做。Jackson的方法是使用常规Java属性(通过get/set方法)。(将其配置为使用私有字段确实会稍微降低运行时性能,但仍然比Gson快得多。)

简短回答:不。嗨,Brian,我说的对吗,解释您的评论和链接线程,因为gson#序列化和gson#反序列化应该对称,所以现在和将来都不可能序列化本地类和匿名类?很有趣,因为序列化和反序列化几乎是不对称的