private static void RestoreCollection(TaskCollection collection, JsonData tree)
 {
     if (tree == null || tree.IsNull)
     {
         return;
     }
     if (!tree.IsArray)
     {
         throw new ArgumentException("Array JsonData expected. Received: " + tree.GetJsonType());
     }
     foreach (JsonData jsonData in ((IEnumerable)tree))
     {
         Task task = new Task();
         task.Text  = (string)jsonData["text"];
         task.Id    = (string)jsonData["id"];
         task.Start = (DateTime)jsonData["start"];
         task.End   = (DateTime)jsonData["end"];
         if (jsonData["complete"] != null)
         {
             task.Complete = (int)jsonData["complete"];
         }
         task.Type = TaskTypeParser.Parse((string)jsonData["type"]);
         if (jsonData["expanded"] != null)
         {
             task.Expanded = (bool)jsonData["expanded"];
         }
         if (jsonData["loaded"] != null)
         {
             task.DynamicChildren = !(bool)jsonData["loaded"];
         }
         else
         {
             task.DynamicChildren = true;
         }
         task.Tags.RestoreFromJson(jsonData["tags"]);
         collection.Add(task);
         TaskCollection.RestoreCollection(task.Children, jsonData["children"]);
     }
 }
 internal void RestoreFromJson(JsonData tree)
 {
     base.Clear();
     TaskCollection.RestoreCollection(this, tree);
 }