为什么Gson toJson总是返回null?

时间:2016-09-16 19:14:53

标签: java android serialization gson

当我尝试将基本对象转换为json时,它似乎返回null我尝试过的所有内容。怎么了?

Person.java

public class Person {
    public String Name;
    public String Address;
}

主要代码

Person person = new Person() {
    {
        Name = "John";
        Address = "London";
    }
};

Gson gson = new Gson();
String jsonPerson = gson.toJson(person);

2 个答案:

答案 0 :(得分:12)

Gson不支持序列化匿名类型。

查看由Sotirios Delimanolis链接的副本。请注意,您使用的双括号初始值设定项有效地创建了一个匿名子类,它有一些令人讨厌的副作用,比如每次使用它时创建新类,以及像Gson这样的东西。

如果您创建了这样的构造函数,它将起作用:

class Ideone
{
    public class Person {
        public String Name;
        public String Address;

        public Person(String Name, String Address) {
            this.Name = Name;
            this.Address = Address;
        }
    }

    public static void main (String[] args) throws java.lang.Exception
    {
        Person person = new Person("John", "London");

        // System.out.println(person.Name);
        Gson gson = new Gson();
        String jsonPerson = gson.toJson(person);
    }
}

顺便说一句,你不应该用大写字母命名你的字段;以大写字母开头的课程和小写字母的字段。

Have a look at the Google Java Style Guide for a good reference on naming conventions

答案 1 :(得分:3)

实例化对象的方式会创建一个匿名类,因此您将丢失该类型。您可以使用TypeToken来修复此问题,如下所示

Type personType = new TypeToken<Person>(){}.getType();
Gson gson = new Gson();
String jsonPerson = gson.toJson(person, personType);