2014-06-11 62 views
1

我JSON:與列表反序列化JSON包裝對象返回null屬性,如下面

{"examinationTypes":[{"ExaminationTypeVO":{"id":1,"name":"Badanie krwi"}},{"ExaminationTypeVO":{"id":2,"name":"Spirometria"}},{"ExaminationTypeVO":{"id":3,"name":"Wymaz"}},{"ExaminationTypeVO":{"id":4,"name":"Ciśnienie"}},{"ExaminationTypeVO":{"id":5,"name":"EKG"}},{"ExaminationTypeVO":{"id":6,"name":"Elektrowstrząsy"}},{"ExaminationTypeVO":{"id":7,"name":"Tomografia"}},{"ExaminationTypeVO":{"id":8,"name":"Lewatywa"}},{"ExaminationTypeVO":{"id":9,"name":"Aneskopia"}},{"ExaminationTypeVO":{"id":10,"name":"Rektoskopia"}},{"ExaminationTypeVO":{"id":11,"name":"Kolonoskopioa"}},{"ExaminationTypeVO":{"id":12,"name":"Echo serca"}},{"ExaminationTypeVO":{"id":13,"name":"Ablacja"}},{"ExaminationTypeVO":{"id":14,"name":"Badnaie dopplerowskie"}},{"ExaminationTypeVO":{"id":15,"name":"Kapilaroskopia"}}]} 

我已經定義類型:

@JsonRootName(value="ExaminationTypeVO") 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class ExaminationTypeVO { 


private Long id; 

private String name; 

public Long getId() { 
    return id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 
} 

public class ExaminationTypesVO { 

private List<ExaminationTypeVO> examinationTypes; 

public List<ExaminationTypeVO> getExaminationTypes() { 
    return examinationTypes; 
} 

public void setExaminationTypes(List<ExaminationTypeVO> examinationTypes) { 
    this.examinationTypes = examinationTypes; 
} 

當我反序列化它像這樣:

ExaminationTypesVO l = m.readValue(result, ExaminationTypesVO.class);

我收到一個包裝對象,但裏面的列表包含所有屬性設置爲null的類型爲ExaminationTypeVO的對象。

有人可以幫忙弄清楚嗎?

+0

我不認爲'JsonRootName'與嵌套對象一起工作。從調查開始。 –

回答

2

你的問題是你有一個額外的級別的對象,你試圖反序列化。儘量不要混淆,因爲我解釋了這一點:你有一個對象數組,這些對象包含一個單一的ExaminationTypeVO對象。

如果您堅持使用您提供的JSON結構,那麼您需要爲您的反序列化添加另一個「級別」。如果您對要被反序列化,你可以刪除多餘的「級別」(ExaminationTypeVO包裝物),並沒有JSON控制

public class ExaminationTypesVO { 
    private List<ExaminationTypeVOWrapper> examinationTypes; 

    public List<ExaminationTypeVOWrapper> getExaminationTypes() { 
     return examinationTypes; 
    } 

    public void setExaminationTypes(List<ExaminationTypeVOWrapper> examinationTypes) { 
     this.examinationTypes = examinationTypes; 
    } 

    public static class ExaminationTypeVOWrapper { 
     private final ExaminationTypeVO examinationTypeVO; 

     @JsonCreator 
     public ExaminationTypeVOWrapper(@JsonProperty("ExaminationTypeVO") ExaminationTypeVO examinationTypeVO) { 
      this.examinationTypeVO = examinationTypeVO; 
     } 

     public ExaminationTypeVO getExaminationTypeVO() { 
      return examinationTypeVO; 
     } 
    } 
} 

:您可以將您ExaminationTypesVO類的內部通過包裝對象做到這一點改變你的代碼。在這種方法中新的JSON看起來像:

{ 
    "examinationTypes": [ 
     { 
      "id": 1, 
      "name": "Badanie krwi" 
     }, ... 
    ] 
} 

無論使用哪種方法都可以刪除您對ExaminationTypeVO類級別的註解的。