我为我的 java 类创建了一个自定义序列化程序,其中包含许多嵌套对象。
我的动机是在序列化的 JSON 对象中添加 java 类的类型。
ex 我的班级类型是学生,创建的 JSON 是
{ id:1, name:abc }
我想把它当作
{id:1, name:abc, type:"Student "}
这并不难。我的问题是我的对象就像
{
"description": null,
"edit": [],
"strategy": [
{
"description": null,
"regions": {
"region": []
},
"markets": {
"market": [
{},
{}
]
},
"securityTypes": {},
"parameter": [
{
"description": null,
"enumPair": [],
"name": "StartTime",
"fixTag": 7602,
"use": "REQUIRED",
"mutableOnCxlRpl": true,
"revertOnCxlRpl": null,
"definedByFIX": false,
"minValue": null,
"maxValue": null,
"constValue": null,
"localMktTz": null
},
{},
{},
{}
],
"edit": []
}
],
"draftFlagIdentifierTag": null,
"changeStrategyOnCxlRpl": null,
"imageLocation": null
}
我想为每个参数添加类型,剩下的所有东西都应该保持正常的序列化。
我尝试的是
public class StrategiesSerializer extends StdSerializer<StrategiesT> {
public StrategiesSerializer() {
this(null);
}
public StrategiesSerializer(Class<StrategiesT> strategies) {
super(strategies);
}
@Override
public void serialize(StrategiesT value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
for(Field field: value.getClass().getDeclaredFields()) {
System.out.println(field.getName());
if(field.getName() != "strategy") provider.defaultSerializeField(field.getName(), field, gen);
if(field.getName() == "strategy"){
gen.writeArrayFieldStart("strategy");
for(StrategyT strategy : value.getStrategy()) {
for(Field strategyField : strategy.getClass().getDeclaredFields()) {
provider.defaultSerializeField(strategyField.getName(), strategyField, gen);
}
gen.writeStartObject();
gen.writeStringField("type", strategy.getClass().getName());
gen.writeEndObject();
}
gen.writeEndArray();
}
}
gen.writeEndObject();
}
}
这给了我一些不正确的结果。
如果我能让自己更清楚,请告诉我。