java - Gson如何排除JsonSerializer中的一些字段
问题描述
我只需要一个字段来更改,另一个字段我想要具有默认值,但是使用此代码我在输出中只有一个字段 - 我在 JsonSerializer 中编写的那个,但我需要所有字段并且只有一个字段用于更改。有这个属性的方法吗?
GsonBuilder gson = new GsonBuilder().serializeNulls();
gson.registerTypeAdapter(TripCardView.class, new JsonSerializer<TripCardView>() {
@Override
public JsonElement serialize(TripCardView src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jObj = new JsonObject();
jObj.add("numberShortYear", new JsonPrimitive(src.getNumberShortYear()));
return jObj;
}
});
jsonResponse.add("aaData", gson.setDateFormat("dd.MM.yyyy").create().toJsonTree(result));
解决方案
只是一些小改动,请参见下面代码中的注释:
gson.registerTypeAdapter(TripCardView.class, new JsonSerializer<TripCardView>() {
// You need to create a new Gson in your serializer because calling original contex
// would call this serializer again and cause stack overflow because of recursion
private Gson gson = new GsonBuilder().setDateFormat("dd.MM.yyyy").create();
@Override
public JsonElement serialize(TripCardView src, Type typeOfSrc,
JsonSerializationContext context) {
// You need to serialize the original object to have its fields populated 'default'
JsonElement result = gson.toJsonTree(src);
// After that it is just to add the extra field with value from method call
result.getAsJsonObject().add("numberShortYear",
new JsonPrimitive(src.getNumberShortYear()));
return result;
}
});
推荐阅读
- node.js - 使用 NPM 启动 lite-server 时出错
- php - 我的会话和中间件无法正常工作
- python - Pandas 将 xlxs 解析为 csv - FileNotFoundError
- python - 为什么 Python 的 urllib.request.urlopen 将 POST 数据作为查询字符串发送?
- java - add() 操作在“?extends”和“?super”的区别
- python - Python Xlsx 书写格式建议
- javascript - 将外部文件中的脚本包含到 html 中
- python - 如何在 tkinter.Text 小部件中格式化 JSON 数据的显示?
- swift - 从右到左比从左到右快速移动图像
- jquery - 如何使用 jQuery 显示来自 JSON 的多个数组?