@JsonAdapter(WatusiTypeAdapter.class)
@Expose(serialize = false, deserialize = true)
private Watusi watusi;
如果存在TypeAdapter
,则Expose
注释似乎会被忽略。仍然会调用write
的{{1}}方法,但WatusiTypeAdapter
表示它不应该被调用。也许这个想法是你应该将该决定委托给@Expose(serialize = true)
,但这使得类型适配器更不可重复使用。
这是预期的行为还是错误?
答案 0 :(得分:3)
除非您构建
com.google.gson.Gson
,否则此注释无效 使用com.google.gson.GsonBuilder
并调用com.google.gson.GsonBuilder.excludeFieldsWithoutExposeAnnotation()
方法
以此为例
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
进行注释。