簡體   English   中英

如何在Java中使用“默認”類屬性解碼json字符串?

[英]How can I decode a json string with 'default' class properties in java?

我嘗試了以下代碼:

public class Member{
  int age;
  String name;
  String eyeColor = blue;


  Member (){
  eyeColor = blue;
  }
}

String newMembers="[{\"age\":\"43\",\"name\":\"Anne\"}]";

Gson gson = new Gson();
Type listType = new TypeToken<ArrayList<Member>>() {}.getType();
ArrayList<Member> nMembrs = gson.fromJson(newMembers, listType);

將創建一個新的ArrayList,其中包含成員“ Anne”,但即使使用構造函數,其eyecolor = null。

我該如何實現?

FWIW, 反序列化時這可能是相關的默認值嗎?

如果您的類具有默認的構造函數(甚至是一個空的構造函數),則您的第一個模式(初始化實例變量而不是在構造函數中定義的實例變量)應該可以正常工作。 如果您的類沒有默認的構造函數,我相信(可能是錯誤的),Gson會手動嘗試分配對象,這將完全跳過任何初始化。 這實際上在某些平台上會失敗(我看到過有關Android分配失敗的信息)。

因此,您應始終確保Gson構造的類具有默認構造器 將您顯示在默認構造函數中的代碼起作用的原因可能不是因為您移動了代碼,而是因為根本沒有默認構造函數。

我嘗試了您的代碼(Windows上為Gson 2.2.4,JVM 1.7),但是在您的示例中, blue根本沒有定義。 我定義了:

 public static final String blue = "BLUE";

所以我得到了這個結果:

 Member [age=43, name=Anne, eyeColor=BLUE]

因此,我懷疑在某處定義了blue但由於檢查了默認構造函數已被調用而未初始化。 我還向Members添加了一個int ivar,並將其設置為0。

GSON創建Members使用newInstance方法(大致調用new Member()如果你想建設目標的過程中通過一些值,你需要使用一個InstanceCreator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM