3

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

我是否以完全错误的方式接近这个?

4

3 回答 3

6

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

于 2009-04-03T03:26:28.253 回答
1

序列化 JSON 中的数据有什么用途?纯粹是为了报道吗?如果是这样,那么 Brian 是正确的,那些变量应该有 getter 方法。

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

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

或者你可以使用反射。或者劫持 toString 方法。(或者闪耀它并创建一个 toJson 方法。)

于 2009-04-03T07:54:48.000 回答
0

您是否正在考虑从非 JavaScript 代码(如服务器端 Java)生成 JSON?答案取决于:在 Javascript 和 Java 上处理 JSON 是完全不同的。已经有一个答案 wrt javascript-side,这似乎是正确的。

如果这是在 Java 上,那么有一些库可以提供帮助;例如 ( Jackson ) 可以反序列化任何 bean,使用常规的 getX/setX 方法自省;加上额外的(和可选的)注释。

于 2009-04-08T20:32:21.990 回答