android - 用gson拯救模型的公共(public)结构

标签 android json retrofit gson

我正在使用 retrofit 和 Gson 转换器。我有两个具有相同结构的 JSON,如下所示。

JSON 1

{"message":"ok", 
 "code":200,
 "result":[{"name":"test"
            "id":121
            }]
}

JSON 2

{"message":"ok", 
 "code":200,
 "result":[{"first_name":"test"
            "last_name":"testing2"
            "middle_name":"test123"
            }]
}

为此,我创建了一个通用模型类,例如

public void CommonModel {
    @SerializedName("code")
    public int code;

    @SerializedName("message")
    public String message;

    @SerializedName("result")
    public ResultModel result;

    public void ResultModel{
     public List<JSON1> json1;
     public List<JSON2> json2;
    }
}

public void JSON1 {
    @SerializedName("id")
    public int id;

    @SerializedName("name")
    public String name;
}

public void JSON2 {
    @SerializedName("first_name")
    public String firstName;

    @SerializedName("last_name")
    public String lastName;

    @SerializedName("middle_name")
    public String middleName;
}

但它不起作用。当我在 Jackson 中尝试相同的概念时,效果很好。我想为 Web 服务的响应重用 CommonModel。大家有解决办法欢迎补充

最佳答案

创建通用模型如下

public class Common {
    @SerializedName("message")
    private String message;

    @SerializedName("code")
    private String code;

    public String getMessage() {
        return message;
    }

    public String getCode() {
        return code;
    }
}

为 Json One 创建以下模型,在此类上扩展通用模型

public class JsonOne extends Common {

    @SerializedName("result")
    private List<JsonObjectOne> jsonObjectOneList;

    public List<JsonObjectOne> getJsonObjectOneList() {
        return jsonObjectOneList;
    }

    public void setJsonObjectOneList(List<JsonObjectOne> jsonObjectOneList) {
        this.jsonObjectOneList = jsonObjectOneList;
    }
}

public class JsonObjectOne {
    @SerializedName("name")
    private String name;

    @SerializedName("id")
    private String id;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

为 Json 创建模型两个在此类上扩展通用模型

public class JsonTwo extends Common {
    @SerializedName("result")
    private List<JsonObjectTwo> jsonObjectTwoList;

    public List<JsonObjectTwo> getJsonObjectTwoList() {
        return jsonObjectTwoList;
    }

    public void setJsonObjectTwoList(List<JsonObjectTwo> jsonObjectTwoList) {
        this.jsonObjectTwoList = jsonObjectTwoList;
    }
}

public class JsonObjectTwo {
    @SerializedName("first_name")
    private String firstName;

    @SerializedName("last_name")
    private String lastName;

    @SerializedName("middle_name")
    private String middleName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }
}

关于android - 用gson拯救模型的公共(public)结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513342/

相关文章:

ios - NSData 的内容到 NSArray/NSDictionary

json - 发送 Alamofire JSON 数组 Swift

java - 使用 Retrofit 下载图像返回空文件

android - 如何使用 Retrofit 发送 post 请求?

android - 如何在点击 GridView 项目时执行多选功能?

android - 从 Long 格式转换为日期格式

android - Intent 过滤器捕获所有共享 Intent

android - google-services.json 文件丢失

java - 使用异步改造调用在模型中执行附加逻辑

java - Android Studio - 运行 MainActivity 时出错 : Unknown run configuration type AndroidRunConfigurationType