public static Component FromDescriptor(Cartridge cartridge, dynamic spec) { Component component = new Component(); component.Name = string.IsNullOrEmpty(spec["Name"]) ? cartridge.Name : spec["Name"]; if (((Dictionary<object, object>)spec).ContainsKey("Publishes")) { foreach (dynamic c in spec["Publishes"]) { KeyValuePair<object, dynamic> pair = (KeyValuePair<object, dynamic>)c; Connector connector = Connector.FromDescriptor(pair.Key.ToString(), pair.Value); component.Publishes.Add(connector); } } if (((Dictionary<object, object>)spec).ContainsKey("Subscribes")) { foreach (dynamic c in spec["Subscribes"]) { KeyValuePair<object, dynamic> pair = (KeyValuePair<object, dynamic>)c; Connector connector = Connector.FromDescriptor(pair.Key.ToString(), pair.Value); component.Subscribes.Add(connector); } } component.Scaling = spec.ContainsKey("Scaling") ? Scaling.FromDescriptor(spec["Scaling"]) : null; return component; }