我正在使用一个API,它在请求&responses-json数组,其中包含各种格式的元素,我正在努力动态地获得用于序列化/取消序列化此类数组元素的正确类。
以下是json:的简化描述
{
"parameters" :[
{
"name": "elementA",
"value": "valueOfElementAsAString"
},
{
"name": "elementB",
"value": "valueOfElementBAsString"
},
{
"name": "elementC",
"value": [
{
"label":"label1",
"size":"size1"
},
{
"label":"label2",
"size":"size2"
}
]
}
]
}
考虑以下基本类别:
class SimpleElement {
@JsonProperty("name")
public String name;
@JsonProperty("value")
public String value;
//constructor & stuff
}
class ComplexElement {
@JsonProperty("name")
public String name;
@JsonProperty("value")
public ArrayList<ComplexElementValue> value = new ArrayList<ComplexElementValue>();
//constructor & stuff
}
class ComplexElementValue {
@JsonProperty("label")
public String label;
@JsonProperty("size")
public String size;
//constructor & stuff
}
单个简单或复杂元素的序列化/反序列化可以很好地工作,但我应该如何使用@JsonProperty声明我的类参数以正确处理整个数组?:
class Parameters {
???
}
根据我读到的内容,我觉得我必须写一个自定义的deserializer&serializer,但在这样做之前,我想确保没有更简单的方法?
目前,考虑到我有n x simpleElement和1 x complexElement,我可以使用这样一个类:
class Parameter {
@JsonProperty("parameters")
public MultiElement element;
public class MultiElement {
public ArrayList<SimpleElement> regularElements;
public ComplexElement complexElement;
}
//constructor & stuff
}
以及处理json"的去串行化/串行化;手动";使用JsonNode库(在本例中为org.camunda.spin.json.SpinJsonNode(,但对我来说,这听起来像是一个临时解决方案
提前感谢
用于使用jackson处理动态json。
JsonNode是一个简单的节点。公共类参数{private列表参数;//Getters和setter公共静态类参数{
private String name;
private JsonNode value;
//Getters and setters
}
}
如果需要具体的类,这将正确地帮助您Jackson-在运行时在相同密钥下解析不同的模型
基本上尝试使用任何在线转换器将json转换为java类http://www.jsonschema2pojo.org/
请尝试使用modelmapper库进行对象映射。类似于将json对象映射到java对象。