【发布时间】:2017-08-01 06:11:10
【问题描述】:
如果 Gson 无法找到该特定元素,那么使用 Gson 反序列化对象同时保留默认类变量值的最佳方法是什么?
这是我的例子:
public class Example {
@Expose
public String firstName;
@Expose
public String lastName;
@Expose
public int age;
//Lets give them 10 dollars.
public double money = 10;
public Example(String firstName, String lastName, int age, double money) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.money = money;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public double getMoney() {
return money;
}
}
主类:
public class ExampleMain {
public static void main(String[] args) {
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
Example example = new Example("John", "Doe", 24, 10000D);
String json = gson.toJson(example);
Example example2 = gson.fromJson(json,Example.class);
System.out.println(example2.getMoney());
}
}
example2 的输出是 0.0,但不应该是 10.0,因为该类已经定义了 10.0,我知道如果我也想序列化钱,我应该使用 Expose 注释,但主要问题是如果在将来会添加更多类变量并且旧对象不包含 Money,它们将返回 null、false 或 0,而不是它们预设的类值。
谢谢。
【问题讨论】:
-
您使用的是哪个版本的
Gson?显然这仍然是一个未解决的问题 - 请参阅here。您是否尝试包含默认(无参数)构造函数并查看money 字段是否仍包含0?我的建议是您使用GsonBuilder,然后创建您自己的自定义反序列化器。 -
非常感谢,我所做的只是添加了一个空构造函数,现在它返回 10.0,您介意解释一个空白构造函数解决了问题吗?
-
嗨,很高兴这对您有所帮助。为了让您可以接受答案并将您的问题标记为已回答,我已将其解释为答案。
标签: java gson json-deserialization