安卓中的Gson属性顺序问题

4

我已经整合了Gson来创建用于Android应用程序请求的JSON。

这是我的模型类:

public class TwitterUser {

@Expose
public String gid;
public String icon_url;
public Boolean is_app_user;
@Expose
public String displayName;

public TwitterUser(String l, String i, String url, Boolean app_user) {
    gid = i;
    displayName = l;
    icon_url = url;
    is_app_user = app_user;
}

public TwitterUser(String l, String i) {
    gid = i;
    displayName = l;
}

public String getGid() {
    return gid;
}

public void setGid(String gid) {
    this.gid = gid;
}

public String getIcon_url() {
    return icon_url;
}

public void setIcon_url(String icon_url) {
    this.icon_url = icon_url;
}

public Boolean getIs_app_user() {
    return is_app_user;
}

public void setIs_app_user(Boolean is_app_user) {
    this.is_app_user = is_app_user;
}

public String getDisplayName() {
    return displayName;
}

public void setDisplayName(String displayName) {
    this.displayName = displayName;
}

这里是我创建JSON请求的方法:

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();              
gson.toJson(twitterUser));

但是当我向服务器发送请求时,订单将被拒绝。我必须更改请求的字段顺序以保持:

  1. gid
  2. displayName

但是gson创建的顺序相反,有没有办法实现这一点。


添加了一个答案,应该能解决你的问题 - 你还需要额外的帮助吗? - DominikAngerer
嘿G先生,我看这里没有回应 :) 但是你还需要更多关于这个问题的帮助吗? - DominikAngerer
1个回答

6

Gson默认情况下不支持定义属性顺序,但有其他库可以实现。例如,Jackson允许使用@JsonPropertyOrder来定义属性顺序。

当然,Gson也有自己的方法,您可以创建自己的Json序列化器来实现。

public class TwitterUserSerializer implements JsonSerializer<TwitterUser> {

    @Override
    public JsonElement serialize(TwitterUser twitterUser, Type type, JsonSerializationContext context) {
        JsonObject object = new JsonObject();
        object.add("gid", context.serialize(twitterUser.getGid());
        object.add("displayName", context.serialize(twitterUser.getDisplayName());
        // ...
        return object;
    }
}

当然,您需要将此序列化器传递给Gson进行设置,如下所示:
Gson gson = new GsonBuilder().registerTypeAdapter(TwitterUser.class, new TwitterUserSerializer()).excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(twitterUser);

参见:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接