有人可以向我解释为什么在GWT中你不能将客户端/共享pojo(实现Serializable)转换为JSON对象,而不会像使用AutoBeanFactory(例如GWT (Client) = How to convert Object to JSON and send to Server?)或创建javascript那样跳过一堆箍覆盖对象(以及扩展JavaScriptObject)
GWT将你的客户端对象编译成一个javascript对象,那么为什么它不能简单地将你的javascript转换为JSON呢?
提供的GWT JSON库只允许您JSONify扩展JavaScriptObject的Java对象
我显然误解了GWT,因为GWT将一个简单的Java POJO编译成一个javascript对象,而在javascript中你可以将它JSON.stringify为JSON,为什么不在GWT中呢?
答案 0 :(得分:2)
GWT编译你的应用程序,它不只是转换它。它利用JavaScript中的prototype
对象来构建所需的类,通常遵循您的类层次结构(以及您使用的任何GWT类),但它会进行许多其他更改:
优化:
List
,但它只能是ArrayList
,则会重写类型声明。这本身并没有给予太多,但它让其他步骤做得更好,例如在这些之后,编译器会将字段,参数和类型重命名为尽可能小 - 当完成时,字段或参数很少会超过1个字符,因为那些是最常用的并且具有最小的范围,因此可以由编译器最经常地重用。这也会影响尝试将对象视为JSON。
允许您将GWT对象导出为JSON的库通过做出其他假设来实现。
最后一点,既然你在谈论JSON和Javascript - 一些普通的JS不适合写出JSON。日期对象没有一致的JSON识别序列化方法。非树对象图无法序列化:
var obj = {};
obj.prop = {};
obj.prop.obj = obj;
Autobeans带有这些循环引用的内置检查器,我希望JSO序列化也可以。