gpt4 book ai didi

deserialization - Gson:如果存在某些字段,则自定义反序列化

转载 作者:行者123 更新时间:2023-12-04 06:11:01 26 4
gpt4 key购买 nike

我有一个如下所示的类(class)

class Person {
Long id;
String firstName;
int age;
}

我的输入看起来像这样:
{ "id": null, "firstName": "John", "age": 10 }

或像这样:
{ "id": 123 }

第一个变体代表一个"new"(非持久化)人,第二个变体通过其数据库 id 指代一个人。

如果 id是非空的,我想在反序列化期间从数据库加载对象,否则回退到常规解析并将其反序列化为新对象。

我试过的:我目前有一个 JsonDeserializer对于数据库反序列化,但据我了解,没有办法“退回”常规解析。根据 this answer我应该使用 TypeAdapterFactory getDelegateAdapter .我对这种方法的问题是我得到了 JsonReader (而不是例如 JsonElement )所以我无法确定输入是否包含有效的 id不消耗输入。

关于如何解决这个问题的任何建议?

最佳答案

我不知道我是否正确理解了您的问题,但如果您已经有 JsonDeserializer ,你应该有一个像这样的方法:

public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) { ... }

在这个方法中,你有对象 context类型 JsonDeserializationContext ,它允许您在指定对象上调用默认反序列化。

因此,您可以在自定义反序列化器中执行类似操作:
//If id is null...
Person person = context.deserialize(json, Person.class);

JsonDeserializationContext documentation .

关于deserialization - Gson:如果存在某些字段,则自定义反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18585340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com