使用POJO对象列表会更好

时间:2015-12-26 17:44:35

标签: android serialization jackson firebase firebase-realtime-database

我的JSON结构如下:

 {
  "bag" : {
    "descrition" : "my bag 1",
    "text" : 123456,
    "item" : {
      "-K5D9mi--s6jPWNwrNEu" : {
        "name" : "name item",
        "value" : 60
      },
      "-K5R3ugcTVFnNlAEAHus" : {
        "name" : "name item 2",
        "value" : 55
      }}}
 }

如果我按照以下方式制作我的POJO课程:

    public class Item {
        String name;
        int value;
   }
   public class Bag {
      String descrition;
      String text;
      List<Item> item;
    }

当我使用下面的代码反序列化对象时出错,引用对象列表&#34; item&#34;:&#34; JsonMappingException:无法反序列化java.util.ArrayList的实例START_OBJECT令牌&#34;

 Firebase ref = new Firebase("myAdressFirebase/bag/");
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Bag bag = dataSnapshot.getValue(Bag.class);
            }
            @Override
            public void onCancelled(FirebaseError firebaseError) {
            }
        });

什么是最好的POJO让我在一次通话中重新获得父对象Firebase及其子女?

1 个答案:

答案 0 :(得分:4)

您无法序列化项目列表中的对象/哈希映射结构。密钥没有位置,例如"-K5D9mi--s6jPWNwrNEu""-K5R3ugcTVFnNlAEAHus" ;-)。

自从我使用杰克逊以来已经很长时间了,但我相当确定您可以在班级Map<String, Item>中使用item作为Bag - 属性的类型。即我期望Jackson提供从JSON Object到Java Map&lt;&gt;的转换器。界面,反之亦然。