2017-07-03 120 views
0

我遇到了與 json序列化的問題。所以,我使用帶有動態返回的改進來訪問API,因爲json字段不一致。Gson與動態字段序列化

返回看起來像這樣:

{ 
     "_id": "5959bace87b42b0012dd32e3", 
     "user": { 
      "_id": "58fdaca91ab5920", 
      "email": "[email protected]", 
      "fullName": "User full name" 
      "phonenumber": "+449xxxx", 
      "profilePicture": "" 
     } 
    } 

但有時,回報將是這樣的(看user場):

{ 
      "_id": "5959bace87b42b0012dd32e3", 
      "user": "58fdaca91ab5920" 
} 

這是我的POJO

public class Order{ 

    @PrimaryKey 
    @SerializedName("_id") 
    @Expose 
    String id; 

    @SerializedName("user") 
    @Expose 
    User user; 
    //getter setter 
} 

任何人都知道如何解決這個問題?

感謝

+0

我張貼這是一個評論,因爲我不知道這是最好的辦法。我有一個類似的情況,並把''用戶''''JsonElement''。 Gson能夠將json字符串解析爲這種類型。問題是,那麼你必須手動檢查用戶是什麼,並將其轉換爲適當的對象。 – Fred

+0

你的用戶POJO是什麼? – matrix

回答

0

我不知道它的工作或沒有,只是給它一個嘗試:

public class Order{ 

    @PrimaryKey 
    @SerializedName("_id") 
    @Expose 
    String id; 

    @SerializedName("user") 
    @Expose 
    User user; 

    @SerializedName("user") 
    @Expose 
    String userString; 
    //getter setter 
} 

檢查null和使用哪一個是可用的。

編輯: check thisthis also

+1

我想會有一個崩潰,它可能看起來是隨機的,因爲反序列化的行爲可能每次都不一樣,而且json本身總是不一樣,所以當它發生時,json用戶是字符串,並且解析器嘗試反序列化進入用戶對象的崩潰(異常)可能發生**雖然它值得一試,我喜歡你的想法** – Yazan