无法使用自定义杰克逊解析器序列化嵌套对象

我为我的 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();
    
    }
    
}

这给了我一些不正确的结果。

如果我能让自己更清楚,请告诉我。

tmc19850121 回答:无法使用自定义杰克逊解析器序列化嵌套对象

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/17038.html

大家都在问