title: Jackson: Convert JSON to object: ArrayList of objects with arraylist of objects with arraylist of objects
body: <p>I have an android app which makes a call do rest api.
  It returns a list of restaurants. Each restaurant has list of categories. Each category can have multiple dishes.</p>
  
  <p>When I deserialize this list, I have nice ArrayList of Restaurants, each Restaurant also has an ArrayList of Categories, but in Category class, ArrayList of Dishes is null.</p>
  
  <p>Does anyone has any idea how to solve this?</p>
  
  <p>JSON response: (it's actually a object of type ServiceResponse)</p>
  
  <pre><code>{
   "requestToken" : 0,
    "responseCode" : 2,
    "objectType" : "com.test.Restaurant",
    "error" : null,
   "data" : [ {
      "id" : 1,
      "name" : "Name",
      "addressCity" : "Warszawa",
      "addressStreet" : "Kopernika",
      "addressStreetNumber" : "4",
      "addressApartmentNumber" : "17",
      "categories" : [ {
        "id" : 1,
        "restaurantId" : 1,
        "name" : "Breakfast",
        "description" : "Description",
        "dishes" : [ {
          "id" : 11,
          "categoryId" : 1,
          "name" : "Dish 1",
          "description" : "Descr",
          "price" : 8.99,
          "photoId" : 51
        }, {
          "id" : 21,
          "categoryId" : 1,
          "name" : "Dish 2",
          "description" : "Descr",
          "price" : 6.99,
          "photoId" : 41
        }, {
          "id" : 31,
          "categoryId" : 1,
          "name" : "Dish 3",
          "description" : "Descr",
          "price" : 14.99,
          "photoId" : 61
        } ]
      }, {
        "id" : 2,
        "restaurantId" : 1,
        "name" : "Obiady",
        "description" : "Opis kategorii",
        "dishes" : [ {
          "id" : 41,
          "categoryId" : 2,
          "name" : "Danie 4",
          "description" : "Descr",
          "price" : 6.99,
          "photoId" : 0
        }, {
          "id" : 61,
          "categoryId" : 2,
          "name" : "Danie 5",
          "description" : "Descr",
          "price" : 8.0,
          "photoId" : 0
        }, {
          "id" : 101,
          "categoryId" : 2,
          "name" : "Nowy obiad",
          "description" : "",
          "price" : 111.0,
          "photoId" : 0
        } ]
      }, {
        "id" : 3,
        "restaurantId" : 1,
        "name" : "Pasta",
        "description" : "Opis kategorii",
        "dishes" : [ ]
      }, {
        "id" : 4,
        "restaurantId" : 1,
        "name" : "Przystawki",
        "description" : "Opis kategorii",
       "dishes" : [ ]
      }, {
        "id" : 11,
        "restaurantId" : 1,
        "name" : "Some category",
        "description" : "test",
        "dishes" : [ ]
      }, {
        "id" : 51,
        "restaurantId" : 1,
        "name" : "Sushi",
        "description" : "",
        "dishes" : [ ]
      } ]
    }]
    }
  </code></pre>
  
  <p>Parsing result with Jackson:</p>
  
  <pre><code>ServiceResponse response = getServiceOutput(params, httpMethod);
  
  if(response.getData() != null &amp;&amp; response.getData().size() &gt; 0) {
      try {
          // convert data array from object to class defined in objectType (in JSON)
          ObjectMapper mapper = new ObjectMapper();
          Class clazz = Class.forName( response.getObjectType() );
          ArrayList list = (mapper.convertValue(response.getData(), 
              TypeFactory.defaultInstance().constructCollectionType(
                      ArrayList.class, clazz)));
  
          broadcastIntent.putExtra("result", list);
          broadcastIntent.putExtra("response_code", ServiceResponse.OK);
      } catch (Exception e) {
          broadcastIntent.putExtra("response_code", ServiceResponse.ERROR);
          e.printStackTrace();
      }
  }
  </code></pre>