Interface Jackson:反序列化没有注释和混入的接口
我正在尝试创建一种使用Jackson将对象序列化和反序列化为JSON的方法,而不必依赖于注释、混入或任何特定于对象的代码(即:特定的反序列化程序)。但是,反序列化接口时遇到问题 我的想法是将对象的类名存储在JSON中。例如,如果我有以下类: MyClassOne.javaInterface Jackson:反序列化没有注释和混入的接口,interface,jackson,Interface,Jackson,我正在尝试创建一种使用Jackson将对象序列化和反序列化为JSON的方法,而不必依赖于注释、混入或任何特定于对象的代码(即:特定的反序列化程序)。但是,反序列化接口时遇到问题 我的想法是将对象的类名存储在JSON中。例如,如果我有以下类: MyClassOne.java package test.classes; public class MyClassOne{ private String myString; private MyClass myReference;
package test.classes;
public class MyClassOne{
private String myString;
private MyClass myReference;
public MyClassOne(String myString, MyClass myReference) {
this.myString = myString;
this.myReference = myReference;
}
public String getMyString() {
return myString;
}
public MyClass getMyReference() {
return myReference;
}
}
package test.classes;
public class MyClassTwo implements MyClass{
private int myInt;
public MyClassTwo(int myInt) {
this.myInt = myInt;
}
public int getMyInt() {
return myInt;
}
}
MyClassTwo.java
package test.classes;
public class MyClassOne{
private String myString;
private MyClass myReference;
public MyClassOne(String myString, MyClass myReference) {
this.myString = myString;
this.myReference = myReference;
}
public String getMyString() {
return myString;
}
public MyClass getMyReference() {
return myReference;
}
}
package test.classes;
public class MyClassTwo implements MyClass{
private int myInt;
public MyClassTwo(int myInt) {
this.myInt = myInt;
}
public int getMyInt() {
return myInt;
}
}
我想使用Jackson将MyObjectOne
实例序列化为类似以下内容:
{
"_class":"test.classes.MyClassOne" ,
"myString":"Hello World",
"myReference":{
"_class":"test.classes.MyClassTwo",
"myInt":2
}
}
我想知道这是否可行,以及如何与杰克逊一起实现
我的想法是将对象的类名存储在JSON中
您可以考虑自动包含类型信息:
ObjectMapper mapper=new ObjectMapper();
mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL,“_class”);
我正在尝试创建一种使用Jackson将对象序列化和反序列化为JSON的方法,而不必依赖于注释、混入或任何特定于对象的代码(即:特定的反序列化程序) 使用您自己的问题中定义的类型考虑以下代码:
ObjectMapper mapper=new ObjectMapper();
mapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.NON_FINAL,“_类”);
MyClass MyClass=新的MyClass2(2);
MyClassOne MyClassOne=新的MyClassOne(“你好,世界”,myClass);
字符串json=mapper.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(myClassOne);
它将生成以下JSON:
{
“_类”:“com.example.examples.foo.MyClassOne”,
“myString”:“你好,世界”,
“myReference”:{
“_类”:“com.example.examples.foo.MyClassTwo”,
“myInt”:2
}
}
但是,要反序列化上述JSON,类必须具有默认构造函数(或使用)
我的想法是将对象的类名存储在JSON中
您可以考虑自动包含类型信息:
ObjectMapper mapper=new ObjectMapper();
mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL,“_class”);
我正在尝试创建一种使用Jackson将对象序列化和反序列化为JSON的方法,而不必依赖于注释、混入或任何特定于对象的代码(即:特定的反序列化程序) 使用您自己的问题中定义的类型考虑以下代码:
ObjectMapper mapper=new ObjectMapper();
mapper.enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping.NON_FINAL,“_类”);
MyClass MyClass=新的MyClass2(2);
MyClassOne MyClassOne=新的MyClassOne(“你好,世界”,myClass);
字符串json=mapper.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(myClassOne);
它将生成以下JSON:
{
“_类”:“com.example.examples.foo.MyClassOne”,
“myString”:“你好,世界”,
“myReference”:{
“_类”:“com.example.examples.foo.MyClassTwo”,
“myInt”:2
}
}
但是,要反序列化上述JSON,您的类必须有一个默认构造函数(或use)。我认为这不容易,您要实现Apache Avro的某些部分(将模式与数据放在一起)。我认为这不容易,您要实现Apache Avro的某些部分(将模式与数据放在一起)