public static Ticket Deserialize(IDictionary <string, object> dict) { string name = dict["name"].ToString(); IList <object> itemDicts = (IList <object>)dict["items"]; List <TicketItem> items = new List <TicketItem>(); foreach (IDictionary <string, object> itemDict in itemDicts) { TicketItem item = null; switch (itemDict["type"].ToString()) { case "date": item = DateItem.Deserialize(itemDict); break; case "text": item = TextItem.Deserialize(itemDict); break; case "ticket_number": item = TicketNumberItem.Deserialize(itemDict); break; case "line": item = LineItem.Deserialize(itemDict); break; case "border": item = BorderItem.Deserialize(itemDict); break; } if (item != null) { items.Add(item); } } return(new Ticket(name, items)); }