问候我是新来的和Java,非常感谢您的建议。我正在使用gson-2.3.1,当我调用toJson或fromJson时,我意外地返回null。我在一个更复杂的对象上尝试这个,所以我在这里使用用户指南https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples回到了基础。下面的代码几乎完全被复制,编译但是对于我来回返回案件中的null都没有用。只有字符串文字的情况才有效。建议非常感谢,谢谢!
//an object
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
// no-args constructor
}
}
// (Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson expgson2 = new Gson();
String json = expgson2.toJson(obj);
// here json in null - expected was the string below
String expectedjson = "{\"value1\":1,\"value2\":\"abc\"}";
// (Deserialization)
BagOfPrimitives obj2 = expgson2.fromJson(expectedjson, BagOfPrimitives.class);
// result is obj2 is null and not the object expected
答案 0 :(得分:3)
我发现了问题。上面的所有代码都在一个方法中,所以我在一个类中声明了BagofPrimitives类,编译器允许这样做,所以我认为它没问题。记住我是Java新手,还在学习。一旦我将BagofPrimitives移到它所属的位置,代码工作正常。
答案 1 :(得分:0)
虽然Ocean的上述答案是正确的,但我只想说问题出在文档上。看guide,BagOfPrimitives
的内部类似乎完全没问题,实际上它甚至都不受支持。完整工作和非工作代码如下。请注意,两者都编译没有错误。
package com.mypackage;
import com.google.gson.Gson;
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
}
}
public class Trials {
public static void main(String[] args) {
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
System.out.println(json);
}
}
{"value1":1,"value2":"abc"}
package com.mypackage;
import com.google.gson.Gson;
public class Trials {
public static void main(String[] args) {
class BagOfPrimitives {
private int value1 = 1;
private String value2 = "abc";
private transient int value3 = 3;
BagOfPrimitives() {
}
}
BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj);
System.out.println(json);
}
}
null