2010-01-09 3 views
2

Я использую Grails Webflow, какой бы объект я ни передал, он должен быть сериализован. Мои модели домена «реализуют Serializable», поэтому они работают.«org.json.JSONArray реализует Serializable»: Каков наилучший вариант для достижения этого?

Проблема возникает, когда я получаю ответ от WebService. Это класс org.json.JSONArray.

Я просто хочу, чтобы передать весь массив к мнению еще не реализует Serializable, так это не удается,

Любые мысли о том, как я могу передать это, или мой лучший вариант?

Могу ли я просто отредактировать источник библиотеки org.json и сделать каждый класс «imp Serializable»?

Или обработать результат в объекты домена, которые «IMP Сериализуемыми»

+0

Как вы относитесь к 'JSONArray'? – skaffman

+0

Я хочу распечатать значения из этого массива, Так что я всегда мог обработать массив в обычный массив сериализуемых объектов – Daxon

ответ

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()); 
    } 
} 

Вы видите, что есть геттер, который возвращает обернутый JSONArray. Вместо этого используйте его в своих объектах домена. При желании вы также можете позволить этому классу extends JSONArray и делегировать все его методы обернутому JSONArray. Надлежащая среда IDE может автогенерировать их для вас через секунду.

+0

не приведет к тому, что переменная будет потеряна? – CodyBugstein

1

не может вспомнить поведение этого действительного класса, но вы могли бы просто передать его в качестве String представления (что, очевидно, является Serializable) из JSON, а затем повторно проанализировать его до JSONArray с другой стороны - по крайней мере JSONObject может быть построен непосредственно из JSON String и с верхней части головы. Я не могу придумать, почему JSONArray не будет слишком.

+0

Mh, к сожалению, класс просто должен реализовать Serializable, Я не могу разобрать его на стороне обзора, его помещают на сеанс, который нужно перемещать, для компактности, я бы сказал, – Daxon

+0

. А вот, все дело в '' в Граале. – Esko

0

Согласно this link, все, что вам нужно сделать, - объявить объект JSONArray как переходный. Как только он объявлен как переходный, он игнорируется сериализуемым временем выполнения.

Смежные вопросы