自定义 GSON 解析
Custom GSON parsing
我有以下 pojo:
public class PageRedirect implements Parcelable {
@SerializedName("method") private String method;
@SerializedName("url") private String url;
@SerializedName("parameters") private Parameters parameters;
//@SerializedName("parameters") private String params;
......}
参数字段的变化取决于原始 API 的某些参数。所以有时候是{}"json object",如果为空,就是array[]。我知道这是后端的错误。但我想找到一个快速的解决方法......我不想解析参数,而是想将它作为字符串作为注释行获取,然后我将对其进行处理。有什么想法吗?
创建 Gson 实例时,您可以设置自定义 class 反序列化器,如下所示:
final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Parameter.class, new ParameterTypeAdapter());
final Gson gson = gsonBuilder.create();
PageRedirect pageRedirect = gson.fromJson(yourJsonString, PageRedirect.class);
然后您可以按如下方式创建您的 ParameterTypeAdapter
:
public class ParameterTypeAdapter extends TypeAdapter<Parameter> {
@Override
public void write(JsonWriter out, Calendar value) throws IOException {
}
@Override
public Calendar read(JsonReader in) throws IOException {
// do your parsing here
}
您可以找到更多信息 here and here。
编辑:
如果您只想将解析推迟到另一个时刻,您可以将 "parameters"
字段存储为 JsonElement
:
@SerializedName("parameters") private JsonElement parameters;
之后,只需使用parameters.toString();
将其转换为字符串即可
我有以下 pojo:
public class PageRedirect implements Parcelable {
@SerializedName("method") private String method;
@SerializedName("url") private String url;
@SerializedName("parameters") private Parameters parameters;
//@SerializedName("parameters") private String params;
......}
参数字段的变化取决于原始 API 的某些参数。所以有时候是{}"json object",如果为空,就是array[]。我知道这是后端的错误。但我想找到一个快速的解决方法......我不想解析参数,而是想将它作为字符串作为注释行获取,然后我将对其进行处理。有什么想法吗?
创建 Gson 实例时,您可以设置自定义 class 反序列化器,如下所示:
final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Parameter.class, new ParameterTypeAdapter());
final Gson gson = gsonBuilder.create();
PageRedirect pageRedirect = gson.fromJson(yourJsonString, PageRedirect.class);
然后您可以按如下方式创建您的 ParameterTypeAdapter
:
public class ParameterTypeAdapter extends TypeAdapter<Parameter> {
@Override
public void write(JsonWriter out, Calendar value) throws IOException {
}
@Override
public Calendar read(JsonReader in) throws IOException {
// do your parsing here
}
您可以找到更多信息 here and here。
编辑:
如果您只想将解析推迟到另一个时刻,您可以将 "parameters"
字段存储为 JsonElement
:
@SerializedName("parameters") private JsonElement parameters;
之后,只需使用parameters.toString();