使用 GWT 内置的 RPC 序列化/反序列化机制

Posted

技术标签:

【中文标题】使用 GWT 内置的 RPC 序列化/反序列化机制【英文标题】:Using RPC serialization/deserialization mechanism built in GWT 【发布时间】:2011-07-29 12:40:19 【问题描述】:

我正在使用 html5 本地存储开发 GWT 离线应用程序。我想使用 com.google.gwt.storage.client.Storage(在 2.3 版中引入)缓存/存储传输对象。但问题是,就目前(2.3 版)而言,Storage 只能保存字符串值。

是否有可能从客户端代码中使用 GWT 内置的 rpc 序列化/反序列化机制?这样我就可以序列化传输对象并将它们存储在本地存储中,并在需要时检索它们并反序列化内容。

【问题讨论】:

【参考方案1】:

GWT Docs有话要说:

本地存储是字符串存储

HTML5 本地存储将数据保存在 字符串形式作为键值对。如果您要保存的数据不是 字符串数据,您负责与字符串之间的转换 使用本地存储时。对于与 GWT 一起使用的代理类 RequestFactory,可以使用RequestFactory#getSerializer()来做 字符串序列化。对于非代理对象,您可以使用 JSON 字符串化和解析。


编辑:

RequestFactory#getSerializer() 返回ProxySerializer 的实现。但是

ProxySerializer 序列化 EntityProxy 对象的图形。一种 ProxySerializer 与 ProxyStore 的实例相关联时,它 是通过 RequestFactory.getSerializer(ProxyStore) 创建的。

所以你不能用它来序列化任意对象。只有EntityProxy 对象可以这样序列化。 GWT 文档没有提到对非EntityProxy 对象进行此类序列化的任何方法,因此我认为可以安全地假设到目前为止还没有现成的解决方案。对于非EntityProxy 对象,GWT 文档(上面引用)建议使用 JSON 序列化。

【讨论】:

我想使用 GWT 的库方法来序列化/反序列化对象,而不是 JSON。你能举例说明如何使用 RequestFactory#getSerializer() 来做到这一点吗?

以上是关于使用 GWT 内置的 RPC 序列化/反序列化机制的主要内容,如果未能解决你的问题,请参考以下文章

什么反序列化 GWT RPC 调用客户端

GWT JPA - 无法反序列化响应

出于调试目的从 GWT RPC 有效负载中反序列化日期和时间戳

GWT:响应无法反序列化

打开新页面,反序列化 GWT 中的对象

使用 GWT RPC 序列化在 POST 中将对象从客户端发送到服务器