首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Json <->使用GWT的Java序列化

Json <->使用GWT的Java序列化
EN

Stack Overflow用户
提问于 2009-03-25 19:40:41
回答 12查看 51.1K关注 0票数 59

我正在寻找一个简单的Json (反) Java序列化程序,可能与GWT一起工作。我用谷歌搜索了一下,找到了一些解决方案,它们要么需要注释每个成员,要么需要定义无用的接口。挺无聊的。为什么我们不做一些非常简单的事情,比如

代码语言:javascript
复制
class MyBean {
    ...
}

new GoodSerializer().makeString(new MyBean());
new GoodSerializer().makeObject("{ ... }", MyBean.class)
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-04-10 07:03:14

看看GWT的Overlay Types。我认为这是迄今为止在GWT中使用JSON的最简单方法。以下是链接文章中修改后的代码示例:

代码语言:javascript
复制
public class Customer extends JavaScriptObject {
    public final native String getFirstName() /*-{ 
        return this.first_name;
    }-*/;
    public final native void setFirstName(String value) /*-{
        this.first_name = value;
    }-*/;
    public final native String getLastName() /*-{
        return this.last_name;
    }-*/;
    public final native void setLastName(String value) /*-{
        this.last_name = value;
    }-*/;
}

一旦定义了overlay类型,就很容易从JSON创建一个JavaScript对象并在Java语言中访问它的属性:

代码语言:javascript
复制
public static final native Customer buildCustomer(String json) /*-{
    return eval('(' + json + ')');
}-*/;

如果您再次需要对象的JSON表示,您可以将overlay类型包装在JSONObject中:

代码语言:javascript
复制
Customer customer = buildCustomer("{'Bart', 'Simpson'}");
customer.setFirstName("Lisa");
// Displays {"first_name":"Lisa","last_name":"Simpson"}
Window.alert(new JSONObject(customer).toString());
票数 56
EN

Stack Overflow用户

发布于 2011-02-18 05:44:54

另一件值得尝试的事情是GWT2.1引入的新AutoBean框架。

您定义了bean的接口和提供它们的工厂,GWT将为您生成实现。

代码语言:javascript
复制
interface MyBean {
  String getFoo();
  void setFoo(String foo);
}

interface MyBiggerBean {
  List<MyBean> getBeans();
  void setBeans(List<MyBean> beans>;
}

interface Beanery extends AutoBeanFactory{
  AutoBean<MyBean> makeBean();
  AutoBean<MyBiggerBean> makeBigBean();
}

Beanery beanFactory = GWT.create(Beanery.class);

void go() {
  MyBean bean = beanFactory.makeBean().as();
  bean.setFoo("Hello, beans");
}

AutoBeanCodex可用于将它们序列化到json或从json序列化。

代码语言:javascript
复制
AutoBean<MyBean> autoBean = AutoBeanUtils.getAutoBean(bean);
String asJson = AutoBeanCodex.encode(autoBean).getPayload();

AutoBean<MyBean> autoBeanCloneAB = 
  AutoBeanCodex.decode(beanFactory, MyBean.class, asJson );

MyBean autoBeanClone = autoBeanCloneAB.as(); 
assertTrue(AutoBeanUtils.deepEquals(autoBean, autoBeanClone));

它们也可以在服务器端工作--使用AutoBeanFactoryMagic.create(Beanery.class)而不是GWT.create(Beanery.class)

票数 38
EN

Stack Overflow用户

发布于 2010-07-17 13:04:09

最简单的方法是使用GWT的内置JSON API。这是the documentation。这里有一个关于如何使用它的great tutorial

它就像这样简单:

代码语言:javascript
复制
String json = //json string
JSONValue value = JSONParser.parse(json);

JSONValue应用程序接口非常酷。它允许您在从JSON对象提取值时链接验证,以便在格式有任何错误时抛出异常。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/683123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档