现在市面上所有的 JSON 库都能很好的支持 Java 对象到 JSON 字符串的序列化和反序列化,但是一般在做反序列化的时候都需要提供所序列化的对象类型。
假设提供一个 JSON 字符串,能否直接通过 Object deserialize(String json) 这样的方法直接实现反序列化呢?
我的设想是在序列化的时候将对象的类型信息追加到 JSON 信息中,例如
{"__classname__":"net.oschina.j2cache.TestObject"}
但是需要处理太多种组合情况了,例如原生类型、数组类型、集合类型等等,还包括嵌套类。
大家有什么好想法。
不要类型了全部存成字符串然后手动转换类型?我选择带类型的~
如一楼说的,fastjson好像是支持的,JSON.parseArray和JSON.parseObject好几个重载方法里都能传入对应的类型,既然主动把对象类型写入到json中了,那么可以通过字符串的完全限定名找到对应的类,然后再调用JSON.parseArray或者JSON.parseObject,至于嵌套类型,fastjson应该原生支持。
你可以参考morphia 他就是这么干的
可能自己封装会好一点,感觉这么设计太多未定义行为了。本来json就是为了简单,最终设计出个SOAP就没意义了,真要SOAP还不如XML实在点。
除非你的Object是map和list组合而成,不然无论怎么传递(参数、注解、序列化到json串),目标的class你都必须传,不传反射不了啊