/// <summary> /// The write xml. /// </summary> /// <param name="writer"> The writer. </param> public void WriteXml(XmlWriter writer) { // Special case for reference decider. // TODO(co): Would be nice to capsule this inside the ReferenceTask class, but the xml node is written // before the ReferenceTask object gets the control. ReferenceTask referenceTask = this.task as ReferenceTask; if (referenceTask != null) { string typeString = referenceTask.TaskDescription != null ? referenceTask.TaskDescription.TypeName : typeof(ReferenceTask).AssemblyQualifiedName; writer.WriteAttributeString("type", typeString); string elementName = referenceTask.TaskDescription != null ? referenceTask.TaskDescription.ClassName : typeof(ReferenceTask).Name; XmlSerializer serializer = new XmlSerializer(typeof(ReferenceTask), new XmlRootAttribute(elementName)); serializer.Serialize(writer, referenceTask); } else { XmlAnything <ITask> xmlWrapper = new XmlAnything <ITask>(this.task); xmlWrapper.WriteXml(writer); } }
/// <summary> /// Callback when an unknown task should be read from xml. Uses the task descriptions in this set to wrap the unknown task in a ReferenceTask object. /// </summary> /// <param name="reader"> Xml reader. </param> /// <param name="task"> Task which is read. </param> public void OnXmlReadUnknownTask(XmlReader reader, out ITask task) { try { task = ReferenceTask.ReadUnknownTask(reader, this); } catch (XmlException) { /* * CLog.Error( * string.Format("Reading reference task from xml '{0}' failed: '{1}'.", reader.Name, ex.Message));*/ task = null; } }