在Java中将BSON对象数组反序列化为根对象?

在Java中将BSON对象数组反序列化为根对象?,java,android,serialization,jackson,bson,Java,Android,Serialization,Jackson,Bson,我的目标是在Android上反序列化BSON文档数组。当外部数组是匿名的时,反序列化失败(尝试反序列化到CustomObject[].class)。当数组被包装在一个对象中时,该对象具有一个包含该数组的键(反序列化为WrapperObject.class) 在JSON中,对象如下所示: [{"id":....},{"id":....},{"id":....}....] {"0":{"id":....},"1":{"id":....},"2":{"id":....}....} {"data":

我的目标是在Android上反序列化BSON文档数组。当外部数组是匿名的时,反序列化失败(尝试反序列化到
CustomObject[].class
)。当数组被包装在一个对象中时,该对象具有一个包含该数组的键(反序列化为
WrapperObject.class

在JSON中,对象如下所示:

[{"id":....},{"id":....},{"id":....}....]
{"0":{"id":....},"1":{"id":....},"2":{"id":....}....}
{"data":[{"id":....},{"id":....},{"id":....},....]}
根据定义,BSON数组是一个常规的BSON文档,其中键为整数值。换句话说,BSON中的同一对象如下所示:

[{"id":....},{"id":....},{"id":....}....]
{"0":{"id":....},"1":{"id":....},"2":{"id":....}....}
{"data":[{"id":....},{"id":....},{"id":....},....]}
我正试图使用bson4jackson反序列化上面的内容,但它抛出了一个“无法反序列化x的实例出START_对象标记””错误,在stacktrace中,我注意到意外的标记是一个“0”—数组开头的BSON表示

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

[{"id":....},{"id":....},{"id":....}....]
{"0":{"id":....},"1":{"id":....},"2":{"id":....}....}
{"data":[{"id":....},{"id":....},{"id":....},....]}


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

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

但是,有一个解决办法。Jackson在读取数组时调用低级解析器的
isExpectedStartArrayToken()
方法。因此,如果当前对象是文档,但需要数组,则bson4jackson可以切换到数组解析

修复程序刚刚实现。有关更多详细信息,请参阅: