我正在使用Grails Webflow,我传递给视图的对象是什么,它必须是序列化的。 我的域模型“实现Serializable”,因此它们可以工作。
问题是当我从WebService获得响应时。 它是org.json.JSONArray类。
我只想将整个数组传递给视图,但它没有实现Serializable, 所以它失败了,
关于如何通过这个或者我最好的选择的任何想法?
我可以只编辑org.json库的源代码并使每个类“imp serializable”吗?
或者将结果处理为执行“imp Serializable”的域对象
答案 0 :(得分: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());
}
}
你看到有一个getter返回包装的JSONArray。请在您的域对象中使用它。或者,您也可以让这个类extends JSONArray
并将其所有方法委托给包装的JSONArray。一个体面的IDE可以在一秒钟内为您自动生成它们。
答案 1 :(得分:1)
无法记住该实际类的行为,但您可以将其作为JSON的String
表示(显然是Serializable
)传递,然后重新将其解析到另一方的JSONArray
- 至少JSONObject
可以直接从JSON字符串构建,从我的头脑中我无法想到为什么JSONArray
不会太
答案 2 :(得分:0)
根据this link,您需要做的就是将JSONArray对象声明为瞬态。一旦声明为瞬态,可序列化的运行时将忽略它。