0
我想了解系统反序列化JSON数据时的处理顺序。当反序列化JSON是刚设置的参数?
参数是否刚刚创建POJO? 还是通过调用各种setSomeArg(String someValu)方法来设置参数?
我没有通过搜索或Google找到我的答案。 欣赏这一点。如果这与已经在SO中的帖子重复,请发布链接,而不是仅仅说它是重复的。谢谢。
我想了解系统反序列化JSON数据时的处理顺序。当反序列化JSON是刚设置的参数?
参数是否刚刚创建POJO? 还是通过调用各种setSomeArg(String someValu)方法来设置参数?
我没有通过搜索或Google找到我的答案。 欣赏这一点。如果这与已经在SO中的帖子重复,请发布链接,而不是仅仅说它是重复的。谢谢。
反序列化过程使用自省/反射,这意味着它将检查与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
我使用的FasterXML.Jackson库。我的确了解了上述情况,这只是我对此感兴趣的价值的实际设定。它是通过将属性设置为JSON中的值来设置的属性,还是利用POJO中为该属性定义的setSomeMethod()? – Elijah
我刚刚编辑回答匹配您的评论。我认为,“setLong(objectConcerned,value)”是你正在寻找的方法。 – yanneke
就这样我们在同一页面上,你说当JSON被反序列化到pojo中时,pojo属性是通过setSomeArg(String someValu)方法设置的,并且情况总是如此,对吗? – Elijah