反序列化JSON时刚刚设置的参数是什么?

时间:2017-03-16 10:58:27

标签: java json jackson json-deserialization

我试图理解系统反序列化JSON数据的处理顺序。

是否正在为POJO的创建设置参数? 或者是通过调用各种setSomeArg(String someValu)方法设置的参数?

我没有通过搜索或Google找到答案。 欣赏对此的任何见解。如果这与已经在SO中的帖子重复,请发布链接,而不仅仅是说它是重复的。感谢。

1 个答案:

答案 0 :(得分:0)

反序列化过程使用内省/反射,这意味着它将检查与JSON中发现的属性相同的属性,然后根据类属性类型设置值(即,如果将值转换为整数,则将值转换为整数它是一个整数)。

该过程是递归的,因此如果您的POJO具有其他POJO作为属性,它将尝试将JSON的值解析为对象,直到设置每个属性。 我不知道你正在使用哪个库,但是Genson要求一个没有属性的构造函数,以便通过内省/反射以类似

的方式调用它。
POJO myPojo = POJO.class.newInstance();

然后,它将以如下方式设置每个属性:

long value = Long.ParseLong(myJson.get('value'));
// The example field is a long int
Field f = POJO.getClass().getDeclaredField("aFieldName");
f.setLong(myPojo, value); 

如果您想要更完整的示例,请查看javadoc:https://docs.oracle.com/javase/tutorial/reflect/member/fieldValues.html