一尘不染

与GWT一起使用的Json <-> Java序列化[关闭]

json

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。

7年前关闭。

我正在寻找一个适用于Java 的 简单
Json(反)序列化器,它可以与GWT一起使用。我在谷歌上搜索了一下,发现了一些需要注释每个成员或定义无用接口的解决方案。很无聊。为什么我们没有真正简单的东西

class MyBean {
    ...
}

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

阅读 260

收藏
2020-07-27

共1个答案

一尘不染

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

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;
    }-*/;
}

一旦定义了覆盖类型,就很容易从JSON创建JavaScript对象并在Java中访问其属性:

public static final native Customer buildCustomer(String json) /*-{
    return eval('(' + json + ')');
}-*/;

如果要再次使用该对象的JSON表示形式,可以将覆盖类型包装在JSONObject中:

Customer customer = buildCustomer("{'Bart', 'Simpson'}");
customer.setFirstName("Lisa");
// Displays {"first_name":"Lisa","last_name":"Simpson"}
Window.alert(new JSONObject(customer).toString());
2020-07-27