J'essaie de sérialiser une arrayliste de JSONObjects. Mais je reçois l'erreur:
private void serializeQuotes() { FileOutputStream fos; try { fos = openFileOutput(Constants.FILENAME, Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(quotes); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") private void deserializeQuotes() { try { FileInputStream fis = openFileInput(Constants.FILENAME); ObjectInputStream ois = new ObjectInputStream(fis); quotes = (ArrayList<JSONObject>) ois.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
4 Réponses :
mec, c'est Json. Pourquoi ne pas simplement le sérialiser comme JSON, au lieu d'un objet Java de type JSONObject? P>
Par exemple: P>
String myjsonObjectSerialized = myjsonObject.tostring (); code> p>
Pouvez-vous s'il vous plaît élaborer? Peut-être que je me manque tout à fait - peut-être un exemple de code?
Frais. La structure que je stocke est une arrayliste de JSONObjects. Comment allais-je faire ça?
@Sheeehan Alam - Mettez le JsonoBjects dans un Jsonarray ou utilisez-le pour une boucle.
Un autre scénario serait un hashmap avec une jsonobject comme dans cette question: Stackoverflow.com/Questtions/3818745/... (remplacer bouteille code> avec
jsonObject code>)
Vient de trébucher sur cette question. Ne pas mettre en œuvre sérialisable sur une classe utilisée pour la sérialisation est ... une décision intéressante de dire le moins. Ce n'est pas comme si ça ne briserait rien du tout ou je manque quelque chose ici?
@Thaneanthem Comment puis-je mettre et obtenir ce JSONObject à l'intérieur du cache en mémoire comme Memcached?
Lorsque vous utilisez tostring () code>,
date code> sera converti en chaîne. Donc, lorsque vous convertissez la chaîne à JSONOBJECT, ce n'est pas le même!
@Thaneanthem Et si mon type de dB est JSONB? Il doit être casé de type pour persister
Dans le cas où vous voudriez toujours une sérialisation intégrée Java sans avoir à recourir à la maréchal de votre objet JSON dans la notation de chaîne, une chose que vous pourriez faire est d'étendre JSONObject et JSONARRAY à partir d'org.json et simplement implémenter sérialisable. p>
Ensuite, vous pouvez utiliser vos propres versions de JSONOBJECT et JSONARRAY à travers le tableau au lieu des originaux. P>
Assurez-vous de définir tous les constructeurs de vos sous-classes et d'appeler leurs superparts super () ainsi que de mettre en œuvre des méthodes spécifiques qui renvoient les types parent tels que GetjsonObject () et Getjsonarray () à partir de propriétés. P>
voter, puisque c'est la bonne approche. Je fais la même chose depuis que je suis en train de mettre en train de me complonce JSONOBJECT sur MemCache, plutôt que de le faire créer tout le temps ou de manière stricte.
Cela semble fonctionner, mais est-ce «sûr» à faire? Quelque chose à propos de l'extension d'une classe 3ème partie qui n'est pas sérialisable, puis la marquant comme ça, semble un peu risqué.
Si vous avez JSONARRAY à l'intérieur de la classe d'objet sérialisable, essayez d'initialiser Jsonarray de cette manière.
JSONARRAY JSONARRAY JSONARRAY JSONARRAY; FORT> P> public class Person implements Serializable {
private String name;
private transient JSONArray jsonArray;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public JSONArray getJsonArray() {
return jsonArray;
}
public void setJsonArray(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
}
Parce que cela changera de fonctionnalité, vous ne voudrez peut-être pas perdre votre JSONARRAY sur désériorize ..
Une autre solution consiste à échanger Le http://mvnrepositoritity.com/artifact /com.googlecode.json-simple/json-Simple/1.1.1 p>
https: //www.mkyong. COM / Java / JSON-Simple-Exemple-lecture-and-write-json / p> org.json code> bibliothèque avec
json-simple code>. p>
JSONOBJECT CODE> Classe de
JSON-SIMPLE-SIMPLE CODE> EXTENDES
HASHMAP CODE> Qui est Java Serializable ainsi que davantage d'API Java-ISH. P>
Dépendance Maven: H3>
Exemple d'utilisation: h3>