我正在寻找在Android项目中序列化对象的替代方法。我发现Wobly似乎很快而且很小。我理解如何使用Wobly
创建WoblyImpl
包装器,但我完全混淆如何从文件系统中读取/读取这些对象?何时运行WoblyGenerator
并且可以在我的代码中完成?有人可以发布代码示例吗?
答案 0 :(得分:1)
Wobly不支持未知的Object字段。所以字段如:
Object a;
List<Object> b;
Map<Integer, Object> c;
无法使用Wobly序列化。 它支持所有原始类(及其盒装对应物),所有Wobly类,上述任何数组/列表/地图组合。
所以在你的情况下,问题是JSONArray
实现了List<Object>
。如果您知道对象JSONArray
包含哪种对象,例如List<Map<Integer, String>>
,您可以写:
class Example extends WoblyImpl {
@WoblyField(id = 0)
List<Map<Integer, String>> array;
public void setArray(JSONArray json) {
array = (List)json;
}
}
虽然在反序列化后,您将获得ArrayList<HashMap<Integer,String>>
而不是JSONArray
。
如果您不知道对象JSONArray
持有什么,如果可能的话,让它与Wobly一起工作会很痛苦。您可以在此处查看序列化库的全面比较:
https://github.com/eishay/jvm-serializers/wiki
答案 1 :(得分:0)
好的,我明白了。如果您在这里想知道并且想要知道如何操作,请执行以下步骤:
WoblyGenerator.updateSourceFolder("c:/foo/src");
,其中参数是包含您的文件(或包)的目录。我在Eclipse中为此创建了一个小项目,但您也可以使用提供的wobly-generator.jar从命令行运行它。Gotcha :这不适用于smart-json JSONObject或JSONArray或HashMap。我得到的错误是:
java.lang.IllegalArgumentException: next type for class net.minidev.json.JSONObject of index 0, class java.lang.Class
at com.wowd.wobly.generation.WoblyGeneratorUtils.extractNextType(WoblyGeneratorUtils.java:91)
at com.wowd.wobly.generation.types.impl.MapTypeCodeGenerator.defaultTypeFormat(MapTypeCodeGenerator.java:163)
at com.wowd.wobly.generation.types.TypeCodeHandler.defaultTypeFormat(TypeCodeHandler.java:121)
at com.wowd.wobly.generation.WoblyGeneratorUtils.adjusFormatForCompressed(WoblyGeneratorUtils.java:317)
at com.wowd.wobly.generation.WoblyCodeGenerator.generateWriteFieldCode(WoblyCodeGenerator.java:178)
at com.wowd.wobly.generation.WoblyCodeGenerator.generateWriteMethod(WoblyCodeGenerator.java:270)
at com.wowd.wobly.generation.WoblyCodeGenerator.generateFieldsAndMethods(WoblyCodeGenerator.java:647)
at com.wowd.wobly.generation.WoblyCodeGenerator.generateRegularCode(WoblyCodeGenerator.java:721)
at com.wowd.wobly.generation.WoblyCodeGenerator.generateCode(WoblyCodeGenerator.java:677)
at com.wowd.wobly.updater.GenerateAndReplace.update(GenerateAndReplace.java:130)
at com.wowd.wobly.updater.GenerateAndReplace$1.execute(GenerateAndReplace.java:198)
at com.wowd.wobly.updater.GenerateAndReplace$1.execute(GenerateAndReplace.java:1)
at com.wowd.common.functions.impl.FilterProcedure.execute(FilterProcedure.java:40)
at com.wowd.wobly.updater.SourceFilesVisitor.visitDir(SourceFilesVisitor.java:69)
at com.wowd.wobly.updater.SourceFilesVisitor.visitDir(SourceFilesVisitor.java:60)
at com.wowd.wobly.updater.SourceFilesVisitor.visitDir(SourceFilesVisitor.java:60)
at com.wowd.wobly.updater.SourceFilesVisitor.visitDir(SourceFilesVisitor.java:60)
at com.wowd.wobly.updater.SourceFilesVisitor.visitPackage(SourceFilesVisitor.java:38)
at com.wowd.wobly.updater.GenerateAndReplace.updateInPackage(GenerateAndReplace.java:190) WoblyParcel error
at com.wowd.wobly.WoblyGenerator.updatePackage(WoblyGenerator.java:60)
at com.wowd.wobly.WoblyGenerator.updateSourceFolder(WoblyGenerator.java:49)
at Generator.main(Generator.java:19)
如果有人可以告诉我如何解决这个问题 - 将其作为单独的答案发布,我会接受它