Java 通用JSON对象转换
我正在用java中的类反序列化JSON对象。 我得到了不同类型的对象(?扩展了一些东西),我想知道是否有办法以某种通用的方式对它们进行反序列化。Java 通用JSON对象转换,java,json,jackson,Java,Json,Jackson,我正在用java中的类反序列化JSON对象。 我得到了不同类型的对象(?扩展了一些东西),我想知道是否有办法以某种通用的方式对它们进行反序列化。 该方法获得了输出对象类型的某些类类型对象,因此它是强类型的。您尝试过吗?我一直在使用Json lib库来实现这一目标,并对结果感到非常满意。 看看图书馆的例子 您可以注册自定义变形器,将json的嵌套元素转换为适当的类。 我能够获得从json到java的相当复杂的结构,并访问所有嵌套字段 希望它能帮助Jackson不仅可以将类型擦除类作为目标类型,还可
该方法获得了输出对象类型的某些类类型对象,因此它是强类型的。您尝试过吗?我一直在使用Json lib库来实现这一目标,并对结果感到非常满意。 看看图书馆的例子 您可以注册自定义变形器,将json的嵌套元素转换为适当的类。 我能够获得从json到java的相当复杂的结构,并访问所有嵌套字段
希望它能帮助Jackson不仅可以将类型擦除类作为目标类型,还可以使用通常的“超级类型令牌”模式的类型引用。来自Jackson常见问题解答:
List<MyBean> result = mapper.readValue(src, new TypeReference<List<MyBean>>() { });
并通过以下方式反序列化:
Message msg = objectMapper.readValue(json, Message.class);
获取消息的任何子类。并使用“objectMapper.writeValue();”进行序列化 以下是我的答案: 首先,我已从转换为。 定义抽象类和类型枚举:
public abstract class Message {
private MessageType type;
protected Message(){
type = setType();
}
protected abstract MessageType setType();
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}
public enum MessageType {
PRESENCE(PresenceMessage.class),
TEXT(TextMessage.class);
private Class<? extends Message> clazz;
private MessageType(Class<? extends Message> clazz){
this.clazz = clazz;
}
public Class<? extends Message> getClazz() {
return clazz;
}
}
我希望你能自己补上缺的部分。GSON杜德。
它不支持绑定,就像DOM一样的树。这是一个很好的解决方案,我可以考虑在未来的很多工作中使用它,杰克逊只能用一个JasyType信息注释在基类上自动完成。但无论如何,祝你好运!
public abstract class Message {
private MessageType type;
protected Message(){
type = setType();
}
protected abstract MessageType setType();
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}
public enum MessageType {
PRESENCE(PresenceMessage.class),
TEXT(TextMessage.class);
private Class<? extends Message> clazz;
private MessageType(Class<? extends Message> clazz){
this.clazz = clazz;
}
public Class<? extends Message> getClazz() {
return clazz;
}
}
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream(),"UTF-8"));
while ((line = reader.readLine()) != null){
builder.append(line);
}
if (clazz == Message.class){
String string = builder.toString();
Message message = gson.fromJson(string,Message.class);
if (message.getType() == null)
throw new IllegalStateException("Could not de-serialize message " + builder.toString() );
return (T)gson.fromJson(string,message.getType().getClazz());
}