1

例如我有 json 看起来像:

{
    "data": [
        {
            "name": "one"
        },
        {
            "name": "two"
        }
    ]
}

例如,我有带有字段名称的对象用户。

是否有可能将数据数组解析为对象用户的写入方法?

就像是

Call<List<User>> getUsers(@KeyPath("data"))

现在要做到这一点,我需要创建一个类似的包装类

public class UsersWrapper {
    @SerializeName("data")
    public ArrayList<User> users;
}

接下来我在服务中

public interface Service {
    @GET("users")
    Call<UsersWrapper> getUsers()
}

但我所有的请求只是响应数据,但数组中的变量对象。

在这种情况下,我需要为任何数据请求创建包装器。疼痛 :(

?

4

1 回答 1

2

我会这样做:

Wrapper<T>解析整个 JSON 的全局类

public class Wrapper<T> {
    public List<T> data;
}

User解析实际数组;

public class User {
    public String name;
}

然后,API接口:

@GET("/people")
Wrapper<User> getUsers();

DataSource课堂上做这样的事情:

@Override
public List<User> getUsers() {
    Wrapper<User> usersWrapper = myApiInterface.getUsers();
    return usersWrapper.data;
}

Upd1:
另一种解决方案是为类型创建自定义JsonDeserializer(如此所述)List<User>,通过registerTypeAdapter它与您的自定义Gson对象注册,然后您可以将您的 Json 直接反序列化为List<User>. 不过,这个解决方案带来了更多额外的代码,而且我还不清楚潜在的好处。

于 2016-01-27T15:24:54.257 回答