public void WriteXml(System.Xml.XmlWriter writer) { Type instanceType = base.GetType().BaseType; foreach (PropertyInfo Prop in instanceType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { string value = null; object propertyValue = Prop.GetValue(this, null); if (propertyValue != null) { value = Prop.GetValue(this, null).ToString(); } writer.WriteElementString(Prop.Name, value); } foreach (IFileProcessingJournalEntryData entryData in this.EntryData) { var val = entryData.GetType().GetProperty("Value").GetValue(entryData, null); string name = (string)entryData.GetType().GetProperty("Name").GetValue(entryData, null); string type = (string)entryData.GetType().GetProperty("type").GetValue(entryData, null); var ser = XmlSerializerCache.GetOrAdd(entryData.GetType(), name); ser.Serialize(writer, entryData); } }
public void ReadXml(System.Xml.XmlReader reader) { reader.MoveToElement(); reader.ReadStartElement(); Type instanceType = base.GetType().BaseType; while (reader.IsStartElement()) { if (reader.HasAttributes) { XmlNodeType nodeType = reader.NodeType; Type t = typeof(FileProcessingJournalEntryData <>); t = t.MakeGenericType(Type.GetType(reader.GetAttribute("type"))); string name = reader.GetAttribute("name"); var ser = XmlSerializerCache.GetOrAdd(t, name); object obj = ser.Deserialize(reader.ReadSubtree()); reader.ReadEndElement(); this.EntryData.Add((FileProcessingJournalEntryDataBase)obj); } else { PropertyInfo Prop = instanceType.GetProperty(reader.Name); if (Prop != null) { var h = reader.ReadElementContentAsObject(Prop.Name, ""); Prop.SetValue(this, Convert.ChangeType(h, Prop.PropertyType), null); } } } }
public void WriteXml(XmlWriter writer) { writer.WriteAttributeString("type", type); writer.WriteAttributeString("name", Name); var ser = XmlSerializerCache.GetOrAdd(Type.GetType(this.type)); ser.Serialize(writer, this.Value); }
public void ReadXml(XmlReader reader) { Type t = Type.GetType(reader.GetAttribute("type")); this.type = t.AssemblyQualifiedName; this.Name = reader.GetAttribute("name"); var ser = XmlSerializerCache.GetOrAdd(t); reader.ReadStartElement(); object obj = ser.Deserialize(reader.ReadSubtree()); PropertyInfo prop = this.GetType().GetProperty("Value"); prop.SetValue(this, Convert.ChangeType(obj, t), null); if (!reader.IsEmptyElement) { reader.ReadEndElement(); } else { reader.Read(); } }