关于类型无关的 JSON 数据序列化和反序列化大家有什么好想法吗?

红薯 发布于 2018/05/01 12:37
阅读 829
收藏 0

现在市面上所有的 JSON 库都能很好的支持 Java 对象到 JSON 字符串的序列化和反序列化,但是一般在做反序列化的时候都需要提供所序列化的对象类型。

假设提供一个 JSON 字符串,能否直接通过 Object deserialize(String json) 这样的方法直接实现反序列化呢?

我的设想是在序列化的时候将对象的类型信息追加到 JSON 信息中,例如

{"__classname__":"net.oschina.j2cache.TestObject"}

但是需要处理太多种组合情况了,例如原生类型、数组类型、集合类型等等,还包括嵌套类。

大家有什么好想法。

加载中
0
s
scvzerng1
fastjson就支持
s
scvzerng1
你所说的_classname_ 对应fastjson的就是 @type
s
scvzerng1
为什么不支持,writeclassname特性打开就行了
红薯
红薯
肯定不支持的,这个我知道
0
blu10ph
blu10ph

不要类型了全部存成字符串然后手动转换类型?我选择带类型的~

0
奔跑吧蛋蛋
奔跑吧蛋蛋
我觉得显示带类型会清晰很多,比如Gson
0
kakai
kakai

如一楼说的,fastjson好像是支持的,JSON.parseArray和JSON.parseObject好几个重载方法里都能传入对应的类型,既然主动把对象类型写入到json中了,那么可以通过字符串的完全限定名找到对应的类,然后再调用JSON.parseArray或者JSON.parseObject,至于嵌套类型,fastjson应该原生支持。

红薯
红薯
不支持
0
newzai
newzai
java自己玩可以,夸语言怎么玩
红薯
红薯
json 就可以跨语言
0
pantrick
pantrick

你可以参考morphia 他就是这么干的

0
乌龟壳
乌龟壳

可能自己封装会好一点,感觉这么设计太多未定义行为了。本来json就是为了简单,最终设计出个SOAP就没意义了,真要SOAP还不如XML实在点。

0
尚浩宇
尚浩宇

除非你的Object是map和list组合而成,不然无论怎么传递(参数、注解、序列化到json串),目标的class你都必须传,不传反射不了啊

0
吕兵阳
吕兵阳
jackson支持带类型序列化
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部