internal void Deserialize(XmlTextReader reader, TaskTypes types) { int depth = reader.Depth; // load type var typeName = reader.Name; TaskTypeCategory category = null; foreach (var c in types.TaskTypeCategories) { category = c; TaskType = c.TaskTypes.Find(type => type.TypeName == typeName); if (TaskType != null) { break; } } if (TaskType == null) { throw new NotSupportedException("TaskType \"" + typeName + "\" not found."); } // load parameter values ParameterValues = new string[TaskType.Parameters.Count]; for (int i = 0; i < TaskType.Parameters.Count; i++) { ParameterValues[i] = reader.GetAttribute(TaskType.Parameters[i].Name); } Description = reader.GetAttribute("description"); // load subtasks Subtasks = new List <Task>(); if (category.Name == "Decorators" || category.Name == "ParentTasks") { while (true) { var subtask = new Task(reader, types); if (subtask.TaskType == null) { break; } Subtasks.Add(subtask); } } while (reader.Depth > depth) { reader.Read(); } }
internal TaskType(XmlTextReader reader, TaskTypeCategory category) { Category = category; TypeName = reader.Name; Name = TypeName.Substring(TypeName.LastIndexOf('.') + 1); if (reader.HasAttributes) { while (reader.MoveToNextAttribute()) { if (reader.Name == "_doc_") { Summary = reader.Value; } else { Parameters.Add(new TaskTypeParameter(reader.Name, reader.Value)); } } reader.MoveToElement(); } }