当前位置: 首页 > 面试题库 >

根据GSON中的值从序列化中排除某些字段

习狐若
2023-03-14
问题内容

我使用GSON进行序列化时,没有找到一种方法,无法根据Gson根据字段值提供的ExclusionStrategy类从序列化中排除某些字段,因为它仅支持基于顶级类或字段属性的排除。字段属性不包括该字段的值。所以我该怎么做?


问题答案:

实现此目的的方法是为相关类创建自定义序列化程序。在允许Gson以默认方式创建JSON对象之后,请根据其值删除要排除的属性。

public class SerializerForMyClass implements JsonSerializer<MyClass> {

    @Override
    public JsonElement serialize(MyClass obj, Type type, JsonSerializationContext jsc) {
        Gson gson = new Gson();
        JsonObject jObj = (JsonObject)gson.toJsonTree(obj);   
        if(obj.getMyProperty()==0){
            jObj.remove("myProperty");
        }
        return jObj;
    }
}

并在用于此类的应用程序中用于序列化的Gson对象中注册新的序列化器。

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(MyClass.class, new SerializerForMyClass());
Gson gson=gsonBuilder.create();
gson.toJson(myObjectOfTypeMyClass);


 类似资料:
  • 主要内容:使用excludeFieldsWithModifiers()方法,使用@Expose注解默认情况下,GSON排除序列化/反序列化过程中的瞬态和静态字段。 我们来看看下面的例子。 示例 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 使用excludeFieldsWithModifiers()方法 GsonBuilder使用序列化/反序列化过程中的方法提供对使用特定修饰符排除字段的控制。 看下面的例子。 示例 创建一个名为的Java

  • 我使用Gson与改造。我的服务器接受空值,所以在我给的gson构建器 这样就不会忽略空值。但是在一些s中,我有一个特殊的情况,其中一些字段应该存在,即使是它的null,而其他一些字段如果是null也不应该序列化。 例如,如果我有一个请求类,比如 如果我有一个请求,其中和,应该将其序列化如下: 这意味着,如果type为null,它应该忽略该字段,但是如果id为null,它应该在请求中显示为null。

  • 本文向大家介绍从MySQL的SHOW COLUMNS中排除某些列?,包括了从MySQL的SHOW COLUMNS中排除某些列?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个演示表 现在,您可以在desc命令的帮助下检查表的描述。查询如下- 以下是输出 这是从SHOW COLUMNS中排除某些列的查询。您需要排除“ StudentAge”和“ StudentMarks”列。查询如下-

  • 问题内容: 我有一个包含a 和a的类。现在,我想使用gson序列化对象,但排除该字段。 如您所见,我已经尝试使用,但是似乎没有任何作用。另外,我已经将该字段设置为私有,因为我认为这会“覆盖” 但运行以下代码: 仍然会导致以下文件内容没有错误: 那我在做什么错?我现在一无所知,并且希望得到任何帮助,因为这似乎行不通。 提前致谢。 问题答案: 为了获得此结果,您需要使用注释所有字段: 并将Gson配置

  • 问题内容: 我正在尝试学习Gson,并且在领域排除方面苦苦挣扎。这是我的课 我可以使用并为诸如或的字段名称添加,但是我似乎无法设法排除诸如的某些字段的属性。 使用该方法包含的信息不足,无法使用过滤器将该字段匹配。 PS:我想避免使用注释,因为我想对此进行改进,并使用RegEx过滤掉字段。 编辑:我试图看看是否有可能模拟Struts2 JSON插件的行为 使用Gson 编辑: 我重新打开了以下添加的

  • 问题内容: 示例: File.txt的内容: 当使用’sort -k 1,1 File.txt’时,行的顺序不会改变,尽管我们期望: 如何根据绝对 数值 对包含数字的字段进行排序? 问题答案: 看看手册页进行排序 … 所以这是一个例子…