【问题标题】:Serialize inner class with GSON in JAVA在 JAVA 中使用 GSON 序列化内部类
【发布时间】:2013-07-16 18:30:09
【问题描述】:

我想用 GSON 序列化一个包含内部类的类。我已经检查过内部类是静态的很重要。我已将其设为静态,但我的代码并未对其进行序列化。

我要序列化的类:

public class A{

    static class B{
        public String b; 

        public B() {}
    }

    private int data1 = 100;
    private String data2 = "hello";
    private List<String> list = new ArrayList<String>() {
      {
        add("String 1");
        add("String 2");
        add("String 3");
      }
    };

    public A(){

    }
}

序列化的代码:

public class json 
{

    public static void main(String args[])
    {
        try
        {
            Gson gson = new Gson();
            A a = new A();
            String j = gson.toJson(t);

            System.out.println(j);
    }
}

结果:

{"data1":100,"data2":"hello","list":["String 1","String 2","String 3"]}

问题是结果不包含内部类序列化。

我该如何解决这个问题?

非常感谢您的帮助!

【问题讨论】:

    标签: java json serialization gson inner-classes


    【解决方案1】:

    A 内部没有 B 类型的字段,因此没有什么要序列化的。

    你需要类似...的东西

    public class A {
        ...
        private B b;
        ...
        public A() {
            b = new B();
            b.b = "Some String";
        }
        ...
    }
    

    【讨论】:

      【解决方案2】:

      这是合适的link。它定义了执行此操作的方法,但建议将内部类设为静态。

      【讨论】:

        【解决方案3】:

        由于您的 B 类没有任何值,因此它不会被序列化。 要序列化它,

        您可以使用以下命令配置 gson 构建器:

         GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls();
         Gson gson=gsonBuilder.create();
         gson.toJson(a);
        

        这里是链接: https://github.com/google/gson/blob/master/UserGuide.md#null-object-support

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-16
          • 1970-01-01
          • 1970-01-01
          • 2021-12-08
          • 1970-01-01
          相关资源
          最近更新 更多