使用 GSON 将 Java 复杂对象转为 JSON

标签 java android json gson

我需要创建一个对象(子)列表的列表(一些MyBook)并将其保存到android内部存储中。每个子列表都有一个名称。

我的书:

public class MyBook implements Parcelable{

String name;
List<String> authors;
String publisher;
Bitmap preview;
String description;
List<String> isbn;
List<String> isbnType;
//String isbn;
String imgLink="";
String googleLink ="";
String publishedDate;

ListOfMyBook(子列表):

public class ListOfMyBook extends ArrayList<MyBook>{
    public String listName;

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return listName;
    }

}

我当前的序列化和反序列化代码:

public static final String MY_LIST_FILE = "myList.json";
public static void exportToXml(Context context, List<ListOfMyBook> listListBook){
    Gson gson = new Gson();
    String json = gson.toJson(listListBook);
    Log.d("GSON",json);
    FileOutputStream outputStream;

    try {
      outputStream = context.openFileOutput(MY_LIST_FILE, Context.MODE_PRIVATE);
      outputStream.write(json.getBytes());
      outputStream.close();
    } catch (Exception e) {
        Log.d("exportToXml",e.toString());
      e.printStackTrace();
    }
}


public static List<ListOfMyBook> importFromXml(Context context){
    FileInputStream fis = null;
    try {
        fis = context.openFileInput(MY_LIST_FILE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     InputStreamReader isr = new InputStreamReader(fis);
     BufferedReader bufferedReader = new BufferedReader(isr);
     StringBuilder sb = new StringBuilder();
     String line;
     try {
        while ((line = bufferedReader.readLine()) != null) {
             sb.append(line);
         }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     String json = sb.toString();

    Type listType = new TypeToken<List<ListOfMyBook>>() {}.getType();
    Gson gson = new Gson();
    return gson.fromJson(json, listType);
}

这不会保存 ListOfMyBook 的名称,也不会保存空的 ListOfMyBook。还有更好的实现吗?类可以修改。

最佳答案

所以我实际上想出了自己的解决方案,即不扩展 ArrayList<MyBook>但创建一个像这样的新类:

public class ListOfMyBook implements Parcelable{
    public String listName;
    public List<MyBook> listOfBook = new ArrayList<MyBook>();
}

关于使用 GSON 将 Java 复杂对象转为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609944/

相关文章:

javascript - Cordova 相机插件。 "selection cancelled"错误

android - 如何为 Nexus 4 和类似设备创建不同的布局? (银河S4)

java - 意式 Espresso 。 NoSuchMethodError UsageTracker

javascript - 我将如何从外部 url 解析 json?

json - 如何将json文件读入Clojure defrecord(稍后搜索)

java - 单元测试,自定义调用类改造2请求: Reponse has private access

java - JGIT 验证存储库是否有效

java - 没有为 taglib 文件中的文档检测到语法约束(DTD 或 XML 模式)

javascript - 如何将 PHP 变量的 while 循环作为 JSON 组件传递到 JS 脚本中?

java - Solr 4 Web界面奇怪的查询输出