2016-09-27 57 views
1

我需要修改對象的某些字段,其從使用改造服務器接收之前我存儲在內部: 例如,服務器對象模型的Android Retrotfit修改對象的字段之後接收

{ 
    "field1":boolean; 
    "field2":String 
} 

應用的對象模型:

{ 
    "field1":int=boolean?1:0; 
    "field2":my prefix + String; 
} 

我應該寫我自己的解析器嗎?或者,在對象存儲在本地之前,使用GSON進行解析足以進行一些攔截?

+0

@shadox答案是正確的。在使用onResponse方法接收模型之前,使用JsonDeserializer追加任何字符串或進行任何操作。 – axierjhtjz

+0

請標記其中一個答案。 – shadox

回答

3

爲什麼在發生冰凍後不改變它們?目前還不清楚你想要做什麼,但這裏有一個解決方案。

(1)寫deserilizer

(2)註冊類型的適配器

Gson gson = new GsonBuilder() 
    .registerTypeAdapter(MyModel.class, MyDeserializer) 
    .create(); 

(3)添加它來改造

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl(...) 
    .addConverterFactory(GsonConverterFactory.create(gson)) 
    .build(); 

或者你可以只改變你領域的內容後,你得到你的實例。

1

使用GSON你可以自己編寫JsonDeserializer。 此示例顯示如何將JSON中的int轉換爲對象中的布爾值。

public class BooleanTypeAdapter implements JsonDeserializer<Boolean> { 

@Override 
public Boolean deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
     throws JsonParseException { 
    int code = json.getAsInt(); 
    return code != 0; 
} 
} 

這:

new GsonBuilder().registerTypeAdapter(boolean.class, new BooleanTypeAdapter()).create(); 

希望它能幫助。