2013-10-28 23 views
1

的顯式字段我有一些類這樣的:Android的 - 如何在JSON序列化只是一個擴展類

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> 

因爲在擴展類的字段聲明兩次。

我的問題是:

我怎麼能只序列化擴展的類的領域,忽視了父領域?

請記住,我必須能夠還從父類(一個

回答

0

我已經找到了可行的解決方案:

我去掉了擴展dependecy(有了這個解決方案,我並不需要它更多的,它給你)

創造了「更多根「類,它只包含我想要在類之間共享的字段,並且我想避免這些字段。

加入到這些字段中輸入以下注釋:

@Retention(RetentionPolicy.RUNTIME) 
@Target({ ElementType.FIELD }) 
public @interface JsonIgnore { 

} 

增加我們對我們的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」不會被序列化。

0

爲什麼你需要複製這不是很清楚序列。但是,您可以使用custom deserializer來實現您想要的。一個例子是here

相關問題