当JSON字符串{“a”:1}被反序列化时,数字100应该添加到值1中。在jsonb中,这是通过setter方法实现的,但Gson忽略了setter方法。如何让Gson使用setter方法?或者,如果这不可能,2022年,Gson中的setter推荐的替代方案是什么?
@RestController
public class NumberController {
@RequestMapping("/number")
public Number number() {
String jsonString = "{\"a\":1}";
// Gson.
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
Number numberWithGson = gson.fromJson(jsonString, Number.class);
System.out.println(numberWithGson); // Number(a=1)
// Jsonb.
Jsonb jsonb = JsonbBuilder.create();
Number numberWithJsonB = jsonb.fromJson(jsonString, Number.class);
System.out.println(numberWithJsonB); // Number(a=101)
return numberWithGson; // Returns {"a": 1}, but should return {"a": 101}
}
}
public class Number {
private int a;
public void setA(int a) {
this.a = a + 100;
}
}
我认为您需要使用GSON库中的注释(如Expose或SerializedName)标记属性private int a,以便GSON机制正确地反序列化JSON字符串。有关更多信息和示例,请尝试参考此链接。
问题内容: 使用Gson的方法时,可以使用某种给定类的set 方法吗? 我想这样做是因为对于目标类的每个全局变量都会进行修剪。 为此有任何GSON API注释吗? 我知道GSON提供了编写自定义序列化器/反序列化器的功能,但我想知道是否还有另一种方法可以实现此目的。 问题答案: 我实施了并在上注册了。因此,对于收到的所有String字段,Gson将使用my 反序列化该值。 下面是我的代码: …以及
在使用Gson的fromJson方法时,是否有任何方法可以使用给定类的set方法? 我之所以这样做,是因为对目标类的每个
问题内容: 我使用了很多不可变的集合,并且很好奇如何使用Gson反序列化它们。由于没有人回答,而且我自己找到了解决方案,因此我正在简化问题并提出自己的答案。 我有两个问题: 如何为所有人编写一个作品? 如何全部注册? 问题答案: 更新:有https://github.com/acebaggins/gson- serializers ,其中涵盖了许多番石榴集合: 如何编写适用于所有Immutable
问题内容: 我在尝试序列化包含 即使我写了: 并应用: 我仍然无法序列化此类: Stacktrace :(在pastebin上完整) 有什么办法吗? 问题答案: 您的问题是那是一个。假设您使用它将在Windows PC上创建类似的实例。现在,您必须告诉GSON如何反序列化此类型: 您可以使用的另一种方法是: typeHierarchyAdapter的目的是在您希望为类型的所有子类型使用相同的表示形
问题内容: 我在Android应用程序(带有Gson库)中实现Json反序列化存在一些问题 我已经上了这样的课 反序列化的调用是: 问题是调用后的result.posts列表包含一个LinkedTreeMap对象数组(具有正确的值,因此问题是反序列化)而不是MyJson对象。当我使用MyObject而不是T时,一切运行正常并且MyObject是正确的。 那么,有什么方法可以在不创建自定义反序列化器
问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…