gpt4 book ai didi

gson - 仅在某些字段上使用自定义反序列化器?

转载 作者:行者123 更新时间:2023-12-04 17:56:53 25 4
gpt4 key购买 nike

使用 gson,是否可以仅在某些字段上使用自定义反序列化器/序列化器? user guide显示如何为整个类型而不是特定字段注册适配器。我想要这个的原因是因为我解析了自定义日期格式并将其存储在 long 中。成员字段(作为 Unix 时间戳),所以我不想为所有 Long 注册类型适配器领域。

有没有办法做到这一点?

最佳答案

我还将日期值存储为 long在我的对象中以方便防御性副本。我还需要一种在序列化对象时仅覆盖日期字段的方法,而不必写出过程中的所有字段。这是我想出的解决方案。不确定这是处理这个问题的最佳方式,但它似乎表现得很好。
DateUtil class 是一个自定义类,这里用来获取 Date解析为 String .

public final class Person {
private final String firstName;
private final String lastName;
private final long birthDate;

private Person(String firstName, String lastName, Date birthDate) {
this.firstName = firstName;
this.lastName = lastName;
this.birthDate = birthDate.getTime();
}

public static Person getInstance(String firstName, String lastName, Date birthDate) {
return new Person(firstName, lastName, birthDate);
}

public String toJson() {
return new GsonBuilder().registerTypeAdapter(Person.class, new PersonSerializer()).create().toJson(this);
}

public static class PersonSerializer implements JsonSerializer<Person> {
@Override
public JsonElement serialize(Person person, Type type, JsonSerializationContext context) {
JsonElement personJson = new Gson().toJsonTree(person);
personJson.getAsJsonObject().add("birthDate", new JsonPrimitive(DateUtil.getFormattedDate(new Date(policy.birthDate), DateFormat.USA_DATE)));
return personJson;
}
}
}

当类被序列化时, birthDate字段以格式化 String 形式返回而不是 long值(value)。

关于gson - 仅在某些字段上使用自定义反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6841645/

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