![](/img/trans.png)
[英]JSON serialize only base class fields when a base class-typed reference is passed
[英]Android - How to serialize in JSON only the explicit fields of an extended class
我有一些這樣的課程:
class A {
String fieldA;
String fieldB;
}
class B extends A {
String fieldA;
String fieldC;
}
我知道我可以避免兩次聲明fieldA,但就我而言,我必須這樣做。
在做的時候
JsonElement jsonElement = new JsonParser().parse(GsonSelector.getCurrentGson().toJson(auth, <The_Class>.class));
我顯然有
10-28 15:24:56.645: E/AndroidRuntime(11498): Caused by: java.lang.IllegalArgumentException: class <The_Class> declares multiple JSON fields named <Name>
因為在擴展類中,字段被聲明了兩次。
我的問題是:
如何只序列化擴展類的字段,而忽略父字段?
請記住,我還必須能夠從父類( A )進行序列化
我找到了可行的解決方案:
1我刪除了擴展依賴項(有了此解決方案,我就不再需要它了,這取決於您)
2創建了一個“更多根”類,該類僅包含我要在類之間共享且要避免的字段。
3在這些字段中添加了以下注釋:
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD })
public @interface JsonIgnore {
}
4將我們創建的自定義注釋添加到JSON序列化器(反序列化器)的排除策略中
public class MyExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipClass(Class<?> clazz) {
return false;
}
public boolean shouldSkipField(FieldAttributes f) {
return f.getAnnotation(JsonIgnore.class) != null;
}
}
在前面的示例之后,如下所示:
class Root {
@JsonIgnore
String fieldA;
}
class A extends Root {
String fieldA;
String fieldB;
}
class B extends Root {
String fieldA;
String fieldC;
}
重復的字段“ fieldA”將不會序列化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.