1

我一直在考虑这两个 JSON 库:

  • 谷歌格森
  • JSON.简单
  • XStream

Google Gson 非常棒,它可以序列化没有参数构造函数的类对象。JSON.Simple 很简洁,有一个非常简单易用的 API。然而,这些 JSON/Object 映射库可以在多大程度上破坏,即不能再编组对象,无论是在序列化还是反序列化方面。

对于以下场景:

  • 类的嵌套,即类中的类等
  • 类中的类中的非常长的字符串值以及诸如此类的事情
  • 对象的大小,即包含巨大字节的对象

什么情况下编组不能再忍受撞墙了?

我只是在这里大声思考,以了解在使用这些类型的框架作为我的应用程序的主干时可能出现的问题。以及我们如何预见可能发生的潜在怪癖。

更新:

关于可移植性,我们可以在多大程度上回复(取消)编组,尤其是在处理对象分发时。例如,“序列化”对象通过另一台机器发送,具有不同的 CPU、JVM 等,并且旨在“反序列化”并以某种方式使用。

4

1 回答 1

0

这里有两个限制:JSON 的限制和编组软件的限制。

第一个很明显:

  • JSON 无法序列化图形。JSON 中只有“内容”,这意味着无法在 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
}

第二个限制取决于您的编组软件及其构建方式。简而言之,您将需要两倍的对象图内存:一次用于序列化形式,一次用于非序列化形式。一些解析器更智能,并提供流式传输,从而减少了内存需求。

于 2013-04-03T09:19:27.593 回答