如果我只有我的类的字符串名称,通过规范名称调用和对象的 json 字符串表示,我如何从 json 字符串反序列化我的对象?
换句话说,我需要这样的方法:
public <T> T deserialize(String json, String className) {
// some code
}
我们有类名和 json 字符串 - 我们需要将 json 反序列化为 java 对象。
如果我知道对象的类,我知道如何将 json 反序列化为对象,例如,我们可以使用Jackson:
String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
Car car = objectMapper.readValue(json, Car.class);
但是在我的任务中有一个不同的类 - 它可能是Cat.class,Dog.class,Car.class等等。每个类都有不同的状态。我需要通用的反序列化方法。
我写的是这样的:
public final class Utils implements Serializable {
private Utils () {
throw new AssertionError();
}
private static ObjectMapper objectMapper = new ObjectMapper();
public static String toJson(Object obj) {
String objectToJson;
try {
objectToJson = objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new UncheckedIOException(String.format("Can't serialize object %s to JSON string", obj), e);
}
return objectToJson;
}
public static <T> T fromJson(String json, String className) throws ClassNotFoundException, IOException {
Class<?> clz = Class.forName(className);
return (T) objectMapper.readValue(json, clz);
}
}
它适用于上面的汽车示例,但带有警告cast exception。但也许有更好的方法?
哦,并不是所有的对象都会如此简单。其中一些将封装集合和其他对象。
九州编程
相关分类