我一直在考虑这两个JSON库:
Google Gson非常棒,它可以序列化具有no-args构造函数的类对象。 JSON.Simple是一个非常简单易用的API。但是,在序列化和反序列化方面,这些JSON / Object映射库可以在多大程度上破坏,即无法再编组对象。
对于以下情况:
哪些情况下编组无法再将其或敲打墙?
我只是在这里大声思考,以了解在使用这些框架作为我的应用程序的主干时会出现什么问题。我们如何预见可能发生的潜在怪癖。
更新
关于可移植性,我们可以在多大程度上回复(un)编组,特别是在处理对象分发时。例如,“序列化”对象通过另一台机器发送,具有不同的CPU,JVM等,并且它旨在“反序列化”并以某种方式使用。
答案 0 :(得分:0)
这里有两个限制:JSON的限制以及编组软件的限制。
第一个是显而易见的:
代码中的一个例子:
class Bar { List<Drink> menu = new ArrayList<Drink>(); }
class Drink { List<Bar> servedIn = new ArrayList<Drink>(); }
public void main() {
Bar b = new Bar();
Drink whiskey = new Drink();
b.menu.add(whiskey);
whiskey.servedIn.add(b);
serialize(b);
// a naive serialization will keep serializing
// a smart serialization will not include the Drink.servedIn field or throw an error
}
第二个限制取决于您的marhsalling软件及其构建方式。简单地说,你需要两倍于对象图的内存:一次用于序列化表单,一次用于反序列化表单。有些解析器更智能,并提供流式传输以减少内存需求。