Pertanyaan Perintah properti Gson di android


Saya telah mengintegrasikan Gson untuk membuat json yang digunakan dalam permintaan untuk aplikasi Android.

Ini kelas model saya

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

Berikut ini cara saya membuat permintaan json

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

Tetapi ketika saya mengirim permintaan ke server - pesanan akan ditolak. Saya harus mengubah urutan bidang permintaan agar tetap:

  1. gid
  2. displayName

tetapi gson menciptakan cara lain, apakah ada cara untuk mencapai hal ini.


4
2017-07-21 08:01


asal


Jawaban:


Gson tidak definisi dukungan tatanan properti keluar dari kotak, tetapi ada perpustakaan lain yang melakukannya. Jackson memungkinkan mendefinisikan ini dengan @JsonPropertyOrder, sebagai contoh.

Tapi tentu saja Gson memiliki cara itu sehingga Anda dapat melakukannya dengan membuat serialer Json Anda sendiri:

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

Maka tentu saja Anda harus meneruskan serializer ini ke Gson selama Setup seperti ini:

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

Lihat juga:


5
2018-04-19 16:50