"org.json.JSONArray实现了Serializable":实现这一目标的最佳选择是什么?

Dax*_*xon 2 java arrays grails serialization json

我正在使用Grails Webflow,我传递给视图的对象,它必须是序列化的.我的域模型"实现Serializable",因此它们可以工作.

问题是当我从WebService获得响应时.它是org.json.JSONArray类.

我只想将整个数组传递给视图,但它没有实现Serializable,所以它失败了,

关于如何通过这个或者我最好的选择的任何想法?

我可以只编辑org.json库的源代码并使每个类"imp Serializable"吗?

或者将结果处理为执行"imp Serializable"的Domain对象

Bal*_*usC 6

将它包装为transient实现Serializable并具有readObject()writeObject()重写的类中的属性.

public class SerializableJSONArray implements Serializable {
    private transient JSONArray jsonArray;

    public SerializableJSONArray(JSONArray jsonArray) {
        this.jsonArray = jsonArray;
    }

    public JSONArray getJSONArray() {
        return jsonArray;
    }

    private void writeObject(ObjectOutputStream oos) throws IOException {
        oos.defaultWriteObject();
        oos.writeObject(jsonArray.toString());
    }

    private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException, JSONException {
        ois.defaultReadObject();
        jsonArray = new JSONArray((String) ois.readObject());
    }
}
Run Code Online (Sandbox Code Playgroud)

你看到有一个getter返回包装的JSONArray.请在您的域对象中使用它.或者,您也可以让此类extends JSONArray将其所有方法委托给包装的JSONArray.一个体面的IDE可以在一秒钟内为您自动生成它们.