2016-03-08 170 views
1

我有一個嵌套的對象,我無法用gson序列化。我做了一個自定義的序列化器,它與父對象一起使用,但與我沒有設法使其工作的子對象一起使用。gson嵌套自定義序列化器

所以在我的代碼下面的自定義序列化器被用來序列化一個Team。這樣可行。在這個團隊中,我有一個我想要序列化的User列表。不幸的是,方法addProperty(String a, String b)需要2個字符串(或一個原語),所以我不能添加屬於User類的屬性成員。

下面是代碼,第一I創建Gson對象並註冊Team的自定義序列:

gson = new GsonBuilder().registerTypeAdapter(Team.class, new TeamSerializer()) 
      .create(); 
gson.toJson(userData); // UserData instance. 

這是會被與Gson對象序列化的類(I省略用符號無關的字段// ...):

public class UserData{ 
    public Team team; 
    //... 
} 

這是自定義序列化,我不能添加屬性members

public class TeamSerializer implements JsonSerializer<Team>{ 
    @Override 
    public JsonElement serialize(Team src, Type type, JsonSerializationContext context) { 
     JsonObject object = new JsonObject(); 
     object.addProperty("id", src.getIdteams()); 
     object.addProperty("name", src.getName()); 
     object.addProperty("tag", src.getTag()); 
     object.addProperty("picture", src.getProfilePic()); 
     //object.addProperty("members", src.getMembers()); 
     return object; 
    } 
} 

這是Team類:

public class Team implements Serializable { 
    private long idteams; 
    private String name; 
    private String tag; 
    private String profilePic; 
    private List<User> members; 
    //... 
} 

回答

1

描述的一般關係與TypeToken並使用上下文轉換列表:

TypeToken<List<User>> typeDescription = new TypeToken<List<User>>() {}; 
JsonElement members = context.serialize(src.getMembers(), typeDescription); 
object.addProperty("members", members); 

如果用戶是不是一個標準的豆您也可能需要TypeAdapter

+0

我剛剛試過這個,編譯器說這是不可能在List和TypeToken上調用serialize()。它應該只是列表的列表和Type類型的類型,而不是TypeToken ...你有沒有可能知道爲什麼? – mashaned