序列化还是JSON

    最近在做原生Android应用,有一个功能是在APP中把需要的数据导出(放在sdcard上),然后在Web端将该文件上传管理。当时想到的解决方案有两个,一个是将对象序列化,另一个就是存成JSON格式。因为正好最近看到了序列化,就打算先试试序列化方案。大概序列化的方法可以参考下面链接:

https://www.cnblogs.com/xdp-gacl/p/3777987.html

文章写得比较详细,然后在本机上做了单元测试可以走通,周五的时候就提交代码美滋滋地回去了。

周一同事跟我反馈,在Web端进行文件的反序列化失败了,报错ClassNotFoundException ,原因是因为两个实体类的包路径不同。

这就超出我的知识范围了,赶紧回头找解决方案。

上网查了下,序列化和反序列化的时候有两个基本支撑点,即

1.包名相同

2.serialVersionUID。

因为APP和Web端分别是两个项目,不能让包名相同,上网找解决办法未果,只能改用转JSON的方式:

用的是jackson-mapper-1.9.5.jar这个包

MAPPER.writeValueAsString()方法直接将对象转成JSON,然后放到文件里。

在序列化的时候有个特殊类型的字段(Geometry),直接将其序列化并不会生成自己想要的东西,所以这里做了一部处理,先将其转成String类型再放到文件里:

用的包是arcgis-android-api.jar

String fg = GeometryEngine.geometryToJson(SpatialReference.create(SpatialReference.WKID_WGS84), result.getFeatureGeometry());

反序列化时,有个字段是byte字段需要做特殊处理:

byte[] jsonToByte =  java.util.Base64.getMimeDecoder().decode(byteString);
String url = new String(jsonToByte );

这里采用的是java工具包里的方法,如果你的项目引入了alibaba的包或Apache的包,里面也会有类似的功能。

至此,该功能算是能够交差了,算是给自己知识查缺补漏了。

你可能感兴趣的:(IO,反序列化报错,json转byte,geometry转string,转json)