首页 > 解决方案 > 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));

标签: javajsonserializationgson

解决方案


只是一些小改动,请参见下面代码中的注释:

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;
    }
});

推荐阅读