2012-02-29 68 views
1

这可能有点长,所以请耐心等待。在Android中使用GSON对JSON串进行反序列化

我正在开发Android项目。我有我需要反序列化为代表的JSON结构对象JSON字符串,JSON字符串是类似下面的东西:

{"parents":[ 
    {"parent":{ 
      "id":1, 
      "name":"Sam", 
      "childs":[ 
       { 
        "child":{ 
         "id":1, 
         "name":"Alice", 
         "books":[ 
          { 
           "book":{ 
            "id":1, 
            "name":"Alice in Wonderland" 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 

    }  
]} 

注意数组有重复的值(即许多父母和许多孩子),我只是在这里放一行以使其缩短。

有了这个,我创建的类,以容纳结构:我会创建一个共同的类,以适应重复属性

public class Containers{ 
    private List<Parent> parents; 
    //setter and getter.. 
} 

public static class Parent extends CommonItem { 
    private List<Child> childs; 
    //setter and getter.. 
} 

public static class Child extends CommonItem { 
    private List<Book> books; 
    //setter and getter.. 
} 

public class CommonItem{ 
    private int id; 
    private String name; 
    //setter and getter 
} 

注。 下面是一个使用GSON我如何解析它们:

Gson gson = new Gson(); 
Containers parents = gson.fromJson(jsonString, Containers.class); 

分析后(也就是没有错误),我尝试检索的对象。父母列表中的对象数量是正确的(即,JSON字符串中有5个父母,父母列表中有5个父对象)。但是,它们的所有属性都不存在,并且子树也缺失。

我想了很多配置,包括删除扩展类,并把所有的id和名称在各自的类,但结果仍然是相同的。

任何人都可以给我任何指针,我哪里出错了?

感谢一堆!

+0

OPS ......有另一个类的书,我没放,但它遵循的模式为儿童如何。此外,所有三类父,子和书都是容器的内部类。 – ipohfly 2012-02-29 11:38:32

回答

1

您的JSON和Java类不匹配。

让阅读

{"parents":[ 
    {"parent":{ 
      "id":1, 
      "name":"Sam", 
      "childs":[ 
       { 
        "child":{ 
         "id":1, 
         "name":"Alice", 
         "books":[ 
          { 
           "book":{ 
            "id":1, 
            "name":"Alice in Wonderland" 
           } 
          } 
         ] 
        } 
       } 
      ] 
     } 

    }  
]} 

你的顶级对象有一个具有parents,因为它的属性类的List。您的Java类Container具有parents属性。好。

现在这个列表parents是一个List的对象具有parent属性。您的Parent对象是否具有parent属性?第

进一步向下,每个Parentidname,和对象的Listchilds(儿童,应该是)有child属性,贵Child类有它的属性?

同样,去books

你尝试在你的JSON类,如

{"parents":[ 
     { 
      "id":1, 
      "name":"Sam", 
      "childs":[ 
        { 
         "id":1, 
         "name":"Alice", 
         "books":[ 
          { 
            "id":1, 
            "name":"Alice in Wonderland" 
          } 
         ] 
        } 

      ] 
     } 
]} 
+0

Thanx。在分别添加父级,子级和书籍属性的中间层容器类后,我终于找到了它的工作。 – ipohfly 2012-02-29 16:23:54