gpt4 book ai didi

java - Gson TypeAdapter的write方法即使设置字段不使用Expose序列化依然会被调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:51 28 4
gpt4 key购买 nike

问题

@JsonAdapter(WatusiTypeAdapter.class)
@Expose(serialize = false, deserialize = true)
private Watusi watusi;

如果存在 TypeAdapter,则 Expose 注释似乎会被忽略。 WatusiTypeAdapterwrite 方法仍然被调用,但是@Expose(serialize = true) 意味着它不应该被调用。也许这个想法是您应该将该决定委托(delegate)给 TypeAdapter,但这会大大降低类型适配器的可重用性。

问题

这是预期的行为还是错误?

最佳答案

javadoc of @Expose

This annotation has no effect unless you build com.google.gson.Gson with a com.google.gson.GsonBuilder and invoke com.google.gson.GsonBuilder.excludeFieldsWithoutExposeAnnotation() method.

举个例子

public class Example {
public static void main(String[] args) {
Example example = new Example();
example.other = new Other();

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
System.out.println(gson.toJson(example));
}

@JsonAdapter(value = OtherAdapter.class)
@Expose(serialize = true)
private Other other;
}

class Other {
}

class OtherAdapter extends TypeAdapter<Other> {

@Override
public void write(JsonWriter out, Other value) throws IOException {
System.out.println("hey");
out.endObject();
}

@Override
public Other read(JsonReader in) throws IOException {
// TODO Auto-generated method stub
return null;
}
}

这会产生

{} 

换句话说,write 没有被调用。

这意味着您要公开的所有字段都必须使用 @Expose 进行注释。

关于java - Gson TypeAdapter的write方法即使设置字段不使用Expose序列化依然会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469128/

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