【问题标题】:Gson property order in androidandroid中的Gson属性顺序
【发布时间】:2014-07-21 08:01:56
【问题描述】:

我已经集成了 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 创造了其他方式,有没有办法实现这一点。

【问题讨论】:

  • 添加了一个可以解决您问题的答案 - 您需要其他帮助吗?
  • 嗨 Mr.G,我看到这里没有回复 :) 但是您还需要更多帮助来解决这个问题吗?

标签: java android gson


【解决方案1】:

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

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 2019-05-16
    • 1970-01-01
    • 2015-07-19
    • 2014-07-25
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多