2014-01-29 33 views
1

這裏是我的階級結構:JSON對象映射:避免序列化JSON字符串,它列出派生類

public class Business { 
    public long id; 
    public List<Employee> employees; 
    // constructors, getters, setters 
} 
public class BusinessParcelable extends Business implements Parcelable { 
    // some functions, not additional fields 
} 

public class Employee { 
    // fields, constructor, getters, setters 
} 
public class EmployeeParcelable extends Employee implements Parcelable { 
    // some functions, no additional fields 
} 

如果我使用下面的代碼序列化到JSON字符串:

someFunction(BusinessParcelable b) { 
    ObjectMapper objectMapper = new ObjectMapper(); 
    Business base = (Business)b; 
    String jsonString = objectMapper.writeValueAsString(base); 
} 

的jsonString看起來像:

{ 
    "id": 15, 
    "employees": [ 
     { 
      ... 
     } 
    ], 
    "employeesParcelable": [ 
     { 
      ... 
     } 
    ] 
} 

我不希望員工和employeesParcelable重複在我的JSON st環。我能夠通過更換來解決它:

Business base = (Business)b; 

有了:

Business base = new Business(); 
base.setXXX(b.getXXX()); 
base.setYYY(b.getYYY()); 
base.setZZZ(b.getZZZ()); 

但我想避免這種深刻的副本作爲我的階級結構有很多領域,是多層次深。傑克遜是否有辦法避免重複基本和派生列表(通過一些簡單的註釋)?

編輯: 我只是能夠得到使用谷歌GSON期望的結果:

Gson gson = new Gson(); 
String jsonUsingGson = gson.toJson(base); 

它仍然是很好的知道如何使用傑克遜雖然得到了相同的結果。

回答

0

我想,你的Parcelable接口包含getEmployeesParcelable方法。默認情況下,Jackson序列化所有獲得者。爲了避免這種情況,你可以用這種方式註釋你的方法:

interface Parcelable { 

    @JsonIgnore 
    List<Employee> getEmployeesParcelable(); 

    //other methods 
} 
相關問題