Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Gson-toJson总是返回null?_Java_Android_Serialization_Gson - Fatal编程技术网

Java 为什么Gson-toJson总是返回null?

Java 为什么Gson-toJson总是返回null?,java,android,serialization,gson,Java,Android,Serialization,Gson,当我尝试将一个基本对象转换为json时,我尝试过的所有操作似乎都返回null。怎么了 Person.java 主代码 Gson不支持序列化匿名类型。 参见索蒂里奥斯·德里马诺利斯链接的副本。请注意,您使用的双括号初始值设定项有效地创建了一个匿名子类,它有一些令人讨厌的副作用,比如每次使用它时都创建新类,以及破坏Gson之类的东西 如果您创建的构造函数如下所示: class Ideone { public class Person { public String Name;

当我尝试将一个基本对象转换为json时,我尝试过的所有操作似乎都返回null。怎么了

Person.java 主代码 Gson不支持序列化匿名类型。 参见索蒂里奥斯·德里马诺利斯链接的副本。请注意,您使用的双括号初始值设定项有效地创建了一个匿名子类,它有一些令人讨厌的副作用,比如每次使用它时都创建新类,以及破坏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);
    }
}

另外,你不应该用大写字母来命名你的字段;以大写字母开始上课,以小写字母开始字段


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

Type personType = new TypeToken<Person>(){}.getType();
Gson gson = new Gson();
String jsonPerson = gson.toJson(person, personType);
Type personType=new-TypeToken(){}.getType();
Gson Gson=新的Gson();
字符串jsonPerson=gson.toJson(person,personType);

不起作用,因为您的基类上没有构造函数…只需在
地址
后添加一个无参数构造函数,例如:
Person(){}
然后重试…发布实际的可编译代码,至少发布给否决我答案的人,因为OP是初学者,这并不是一个坏问题,这当然不会让我的答案变差。标记/投票以重复方式关闭,如果您想要的话。奇怪的是,它是为我编译的,没有抛出异常并在这些语句之后继续编写代码。您的解决方案已经为我解决了这个问题,因此,感谢您的支持和样式指南文档1,您忘记了Java的初始值设定项块(请参阅),它经常用于模拟构造函数的命名参数。它使用了OP问题中的初始值设定项块,并将嵌套的
Person
类声明为静态类,以便可以在
main
中引用它。
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);
    }
}
Type personType = new TypeToken<Person>(){}.getType();
Gson gson = new Gson();
String jsonPerson = gson.toJson(person, personType);