【发布时间】:2018-07-20 06:10:24
【问题描述】:
我正在尝试序列化请求,然后再将其发送到改造以进行 Web 服务调用。
当我序列化请求时,我需要将 json 字符串传递给 @Body 参数中的改造调用,因此 生成的 json 字符串会生成以下带有 "(前后双引号)的 json 字符串。
"{\"access_token\":\"d80fa6bd6f78cc704104d61146c599bc94b82ca225349ee68762fc6c70d2dcf0\",\"fitness\":[{\"_id\":\"1d051bfe-df30-4fa0-808b-9d7300a608 :\"877284d3-4f36-4ec0-a536-11563207dc4d\",\"卡路里\":600.0,\"距离\":40.0,\"强度\":\"100\",\"时间戳\":\ "2018-07-18T12:56:43+00:00\",\"type\":\"Running\",\"utc_offset\":\"+05:30\"},{\"_id\ ":\"2004ff72-707d-489a-927e-4cdeed410095\",\"activity_id\":\"5ed7c90f-805e-4763-aa62-7f8126c84f06\",\"卡路里\":600.0,\"距离\": 40.0,\"强度\":\"100\",\"时间戳\":\"2018-07-18T12:56:43+00:00\",\"类型\":\"跑步\", \"utc_offset\":\"+05:30\"}]}"
由于有双引号,第三方 api 无法成功解析。
这是我的请求序列化程序代码
public class RequestSerializer implements JsonSerializer<Request<?>> {
@Override
public JsonElement serialize(Request<?> request, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jsonObject = new GsonBuilder().create().toJsonTree(request,Request.class).getAsJsonObject();
JsonElement requestList = jsonObject.get("requestList");
jsonObject.remove("requestList");
jsonObject.add("fitness",requestList);
return jsonObject;
}
}
调用改造网络服务的代码
GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
builder.registerTypeAdapter(Request.class, new RequestSerializer());
Gson gson = builder.create();
String data = gson.toJson(request);
Flowable<Response> fitnessFlowable = new WebRequest().getRemoteClient().create(FitnessApi.class).postFitnessData("5b238abb4d3590001d9b94a8",data);
【问题讨论】:
标签: android json gson retrofit2