2014-06-11 93 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类级别的注解的。