java - Gson:使用不带注释的方式排除特定类上的字段 - 2

标签 java json serialization gson

目前我正在使用 Gson 将 java 对象序列化为 JSON。 我试图跳过一个类中的字段,但不跳过另一个类中的字段。

示例代码:

Class A {
 var a;
 var b;
}

Class B {
 var a;
 var c;
}

Class C {
 class A;
 class B;
}

我只想在 A 上排除 a,但不在 B 上排除。我无法在字段上添加注释,因为该对象不属于我所有,也无法访问对象 A 并手动删除 a。我正在寻找一些通用方法。

类似问题:Gson: How to exclude specific fields from Serialization without annotations Nishant 提供的答案与我的想法相符。但我觉得这个解决方案并不完全正确,因为下面的条件是错误的。

f.getDeclaringClass() == c

GetDeclaringClass 返回类的类型而不是父类。

我使用 Gson 编写了类似的自定义排除策略。通过排除策略,我可以执行以下操作

shouldSkipClass(class)

shouldSkipField(fieldAttributes).

但如果此 fieldAttributes 仅存在于提供的类中,我希望两者的组合都会跳过。

shouldSkipFieldUnderClass(class, fieldAttributes)

还有其他方法可以达到同样的效果吗?还是我上面做错了什么?请向我提供使用 Gson 跳过特定类中的字段的建议。

最佳答案

I want to exclude a only on A, but not on B.

然后将字段a声明为transient

Class A {
 var transient a;
 var b;
}

Class B {
 var a;
 var c;
}

Class C {
 class A;
 class B;
}

关于java - Gson:使用不带注释的方式排除特定类上的字段 - 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694309/

相关文章:

json - 需要帮助使用 Angular 4 发送此 curl 请求

javascript - JSONRequest.get 无响应

javascript - 在 D3.js 中使用数组作为输入数据

django - 如何序列化 request.POST 到数据库并再次返回

类字段和序列化上的 Java 泛型更改

c# - 我想将流反序列化为 Windows Phone 7 C# 中的联系人

java - 带有事件的警报对话框错误

java - 使用 Java 7 API 逐字节读取文件

java - 使用 Jackson 读取单个 JSON 事件

java - 如何使用 Java 8 Streams groupingBy 将多个数据库记录映射到单个对象,其中一列具有 List<String> 属性