代码之家  ›  专栏  ›  技术社区  ›  blockhead

将业务对象序列化为JSON

  •  3
  • blockhead  · 技术社区  · 17 年前

    我正试图将我的业务对象序列化为JSON,以供JavaScript应用程序使用。问题是,我试图让我的业务对象保持“纯粹”,因为它们不知道数据访问或持久性。在我看来,用tojson()函数“稀释”我的对象将违背这个目标。另一方面,使用外部对象序列化我的业务对象是不起作用的,因为我将所有实例变量都保持私有。

    我是不是走错了路?

    3 回复  |  直到 17 年前
        1
  •  6
  •   Brian Campbell Dennis Williamson    17 年前

    如果实例变量是私有的,那么它们不应该出现在发送到JavaScript应用程序的序列化中。根据定义,如果您对它们进行序列化并将它们发送到单独的应用程序,那么它们是公共的。因此,外部对象应该有某种方式来访问它们,可能是通过某种getter方法。

        2
  •  1
  •   Benry    17 年前

    在JSON中Searialize数据有什么作用?这纯粹是为了报道吗?如果是这样,那么brian是正确的,这些变量应该有getter方法。

    如果序列化的目的是将数据传输到一个javascript应用程序,在该应用程序中可以对数据进行操作,然后将其返回到原始应用程序,那么最好创建一个相关的类,该类用于序列化目的,同时仍保持强封装性。

    例如,在Java中可以定义一个内部类。内部类实例可以直接访问封闭类实例的所有字段,而不需要getter方法。或者可以使用正确的访问修饰符对包(或命名空间)进行分组,以允许序列化程序访问,但不允许任何其他类访问。

    或者你可以用反射。或者劫持toString方法。(或者全部发光,创建tojson方法。)

        3
  •  0
  •   StaxMan    17 年前

    您想从非JavaScript代码(如服务器端Java)生成JSON吗?答案的种类取决于:JSON的处理在JavaScript和Java方面有很大的不同。已经有了一个关于javascript方面的答案,这似乎是正确的。

    如果这是在Java上,有一些库可以帮助,例如 Jackson )可以使用常规的getx/setx方法自省以及附加(和可选)注释反序列化任何bean。