java bsonobject_将BSON对象的反序列化数组作为Java中的根对象?

我的目标是在Android上反序列化一系列BSON文档.当外部数组为匿名时,反序列化将失败(尝试反序列化为CustomObject [].class).当数组用包含该数组的键包装在对象中时,它将起作用(反序列化为WrapperObject.class).

在JSON中,对象如下所示:

[{"id":....},{"id":....},{"id":....}....]

根据BSON Specification,BSON数组是一个常规BSON文档,其中包含密钥的整数值.换句话说,BSON中的相同对象看起来像这样:

{"0":{"id":....},"1":{"id":....},"2":{"id":....}....}

我尝试使用bson4jackson对以上内容进行反序列化,因为它引发了“无法从START_OBJECT令牌中反序列化x的实例”错误,并且在stacktrace中我注意到意外的令牌为“ 0”-数组开头的BSON表示形式.

目前,我的解决方案是将数组包装在一个新的根对象中,该对象在JSON中如下所示:

{"data":[{"id":....},{"id":....},{"id":....},....]}

您可以设置bson4jackson或Java的任何其他反序列化库来将根对象视为数组并按原样处理而不进行包装吗?

解决方法:

原因是bson4jackson是一个低级库,它不知道当前正在解析的对象的类型.在BSON数组中是对象,而bson4jackson只是假设每个文档都有一个对象作为其根.

但是,有一种解决方法.每当读取数组时,Jackson都会调用低级解析器的isExpectedStartArrayToken()方法.因此,如果当前对象是一个文档,但是期望使用数组,则bson4jackson可能会切换到数组解析.

标签:serialization,jackson,bson,java,android

来源: https://codeday.me/bug/20191030/1970145.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值