本文介绍了Gson在android中的属性顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这是我的模型类

  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,布尔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

Gith 不支持支持定义属性,有没有什么方法可以实现这一点。

订购开箱即用 ,但还有其他库可以提供。 杰克逊允许使用,例如。



当然,Gson有它的方式所以你可以通过创建你自己的Json序列化程序来实现它:

  public class TwitterUserSerializer实现了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());
// ...
返回对象;
}
}

然后当然你需要在安装期间将这个序列化程序传递给Gson,如下所示:

  Gson gson = new GsonBuilder()。registerTypeAdapter (TwitterUser.class,新的TwitterUserSerializer())。excludeFieldsWithoutExposeAnnotation()。create(); 
String json = gson.toJson(twitterUser);



另请参阅:



10-27 16:01