将json字符串反序列化为具有杰克逊字符串属性的对象

问题描述

我有一个json字符串,看起来像: {"a":5,"b":"asd","c":"{\"d\":3}"} 可以反序列化为这样的对象:

class A {
   int a; // --> 5
   String b; // --> 'asd'
   String c; // --> '{"d":3}'
}

但我希望将其反序列化为:

class A {
   int a; // --> 5
   String b; // --> 'asd'
   MyClass c; // --> '{"d":3}'
}

MyClass在哪里:

class MyClass {
   int d; // --> 3
}

在反序列化期间如何在杰克逊中实现?

解决方法

尝试两次反序列化:

A aObject = mapper.readValue(json,A.class);
aObject.setCObject(mapper.readValue(aObject.getC(),C.class));

class A {
    int a;
    String b;
    String c;
    C cObject;
}

class C {
    int d;
}
,

我刚刚发现可以使用杰克逊转换器:

public class MyClassConverter implements Converter<String,MyClass> {

  @Override
  public MyClass convert(String value) {
    try {
      return new ObjectMapper().readValue(value,MyClass.class);
    } catch (JsonProcessingException e) {
      throw new RuntimeException(e);
    }
  }

  @Override
  public JavaType getInputType(TypeFactory typeFactory) {
    return typeFactory.constructSimpleType(String.class,null);
  }

  @Override
  public JavaType getOutputType(TypeFactory typeFactory) {
    return typeFactory.constructSimpleType(MyClass.class,null);
  }

}

在Bean中:

class A {
   int a; 
   String b; 

   @JsonDeserialize(converter = MyClassConverter.class)
   MyClass c; 
}