Reputation: 669
I need to serialize the following class:
@JsonSerialize(using = ItemSerializer.class)
public class Project {
@JsonProperty
public Map<String, Field> fields = new HashMap<String, Field>();
}
The Field class:
public class Field {
public String name;
@JsonIgnore
public boolean isStringField;
public Field(String name, boolean isStringField) {
this.name = name;
this.isStringField = isStringField;
}
}
Serialize function:
@Override
public void serialize(...) throws ... {
jgen.writeStartObject();
for(Map.Entry<String, Field> entry : value.fields.entrySet()){
if(entry.getValue().isStringField){
jgen.writeStringField(entry.getKey(), entry.getValue().name);
}else{
jgen.writeObjectField(entry.getKey(), entry.getValue());
}
}
jgen.writeEndObject();
JSON I'm getting is almost what I need:
{
"fieldValue4": {
"name": "field4"
},
"fieldValue3": {
"name": "field3"
},
"fieldValue2": {
"name": "field2"
},
"fieldValue1": "field1"
}
Except that parent element named fileds (variable name from Project class)is not in this JSON. How can I add it to the result JSON to get something like:
{
"fields": {
"fieldValue4": {
"name": "field4"
},
"fieldValue3": {
"name": "field3"
},
"fieldValue2": {
"name": "field2"
},
"fieldValue1": "field1"
}
}
Upvotes: 1
Views: 1568
Reputation: 1752
Since you have already specified your own custom serializer, then it is just a matter of specifying gen.writeObjectFieldStart("fields");
, before serializing your fields
map
Upvotes: 2