我为我的 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();
}
}
这给了我一些不正确的结果。
如果我能让自己更清楚,请告诉我。