Android Retrotfit在接收后修改对象的字段

Android Retrotfit在接收后修改对象的字段,android,retrofit,retrofit2,gson,Android,Retrofit,Retrofit2,Gson,在内部存储之前,我需要修改使用改装从服务器接收的对象的某些字段: 例如,服务器对象模型 { "field1":boolean; "field2":String } 应用程序对象模型: { "field1":int=boolean?1:0; "field2":my prefix + String; } 我应该编写自己的解析器吗?或者在本地存储对象之前,使用GSON进行解析就足够了吗?为什么不在反序列化发生后更改它们?现在还不清楚你想做什么,但这里有一个解决方案

在内部存储之前,我需要修改使用改装从服务器接收的对象的某些字段: 例如,服务器对象模型

{
    "field1":boolean;
    "field2":String
}
应用程序对象模型:

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

我应该编写自己的解析器吗?或者在本地存储对象之前,使用GSON进行解析就足够了吗?

为什么不在反序列化发生后更改它们?现在还不清楚你想做什么,但这里有一个解决方案

(1) 编写反序列化程序

public class MyDeserializer implements JsonDeserializer<MyModel> { 
    ...
}
(3) 将其添加到改装中

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

或者,您可以在获取实例后更改字段的内容。

为什么不在反序列化发生后更改它们?现在还不清楚你想做什么,但这里有一个解决方案

(1) 编写反序列化程序

public class MyDeserializer implements JsonDeserializer<MyModel> { 
    ...
}
(3) 将其添加到改装中

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

或者,您可以在获得实例后更改字段的内容。

使用GSON,您可以编写自己的JsonDeserializer。 此示例显示如何将JSON中的int转换为对象中的boolean

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;
}
}

希望有帮助。

使用GSON,您可以编写自己的JsonDeserializer。 此示例显示如何将JSON中的int转换为对象中的boolean

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;
}
}

希望有帮助。

@shadox的答案是正确的。在onResponse方法上接收模型之前,请使用JsonDeserializer附加任何字符串或执行任何操作。请标记其中一个答案。@shadox答案正确。在onResponse方法上接收模型之前,请使用JsonDeserializer附加任何字符串或执行任何操作。请标记其中一个答案。