假设您有一个包含许多字段的对象A,其中一个字段是唯一标识此对象的id。在我的java代码中有一个对象B,它将这些对象保存在几个与此代码类似的数据结构中:
private List<A> all;
private Map<Long, A> mapped;
现在,当将B序列化为json时,我只希望列表all
中的对象A与所有字段序列化,而映射mapped
中的对象仅与id字段序列化。你会怎么做?
答案 0 :(得分:1)
您可以实现StdConverter接口:
var apiInterface: ApiInterface = ApiClient.getClient()!!.create(ApiInterface::class.java)
var hero: Call<List<Hero>>
hero = apiInterface.getData()
hero.enqueue(object : Callback<List<Hero>> {
override fun onFailure(call: Call<List<Hero>>?, t: Throwable?) {
closeDialog(dialog)
Toast.makeText(mContext, t?.message, Toast.LENGTH_SHORT).show()
Log.d("Error:::",t?.message)
}
override fun onResponse(call: Call<List<Hero>>?, response: Response<List<Hero>>?) {
mHeroDataList.clear()
if (response != null && response.isSuccessful && response.body() != null) {
closeDialog(dialog)
mHeroDataList .addAll(response.body()!!)
setAdapter(mHeroDataList)
}
}
})
然后您可以将转换器添加为JsonSerialize注释:
public class YourConverter implements StdConverter<Map<Long, A>, Map<Long, String>> {
@Override
public Map<Long, String> convert(final Map<Long, A> inMap) {
final HashMap<Long, String> outMap = new HashMap<>();
inMap.forEach((k, v) -> outMap.put(k, v.getId()));
return outMap;
// Or as one-liner
// return inMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getId()));
}
}