Gson - 使用两个不同的键读取值

Bha*_*esh 22 java android gson android-studio android-json

在我的Android项目中,我有两种类型的响应,其中两个响应是相同的,除了两个键.

回应1

{"fullName":"William Sherlock Scott Holmes","address":"221B Baker Street, London, England, UK","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}
Run Code Online (Sandbox Code Playgroud)

回应2

{"name":"Sherlock","city":"London","downloads":642,"rating":3,"repos":["https://link1","https://link2","https://link3"]}
Run Code Online (Sandbox Code Playgroud)

如果您看到响应,则只有两个键名称正在更改 fullName/nameaddress/city

我不想再为其他响应创建一个pojo.我的问题是:是否可以只使用一个Pojo来读取这两个响应?

public class AccountInfo {
    private String name;
    private String city;
    //other objects

    public String getName() {
        return name;
    }

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

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }
    //other setters and getters
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激...

Dou*_*son 40

您可以使用@SerializedName注释来注释成员以接受来自两个不同json名称的:

@SerializedName(value = "name", alternate = {"fullName"})
private String name;
@SerializedName(value = "city", alternate = {"address"})
private String city;
Run Code Online (Sandbox Code Playgroud)

然后可以将命名元素放入这样注释的成员中.

更新: @SerializedName版本2.4中添加反序列化时的备用名称