gpt4 book ai didi

java - android中的Gson属性顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:04 32 4
gpt4 key购买 nike

我已经集成了 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. 显示名称

但是 gson 创造了另一种方式,有什么办法可以实现这一点。

最佳答案

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

另见:

关于java - android中的Gson属性顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860255/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com