public void WriteXml(XmlWriter writer) { foreach (var kvp in this) { writer.WriteStartElement(kvp.Key); if (kvp.Value != null) { var childSerializer = XmlPrimitiveSerializer.TryGetPrimitiveSerializer(kvp.Value.GetType()); if (childSerializer != null) { childSerializer.Serialize(writer, kvp.Value, XmlSerializableSettings.Default); } else { XmlSerializable.Serialize(writer, kvp.Value); } } else { writer.WriteAttributeString("nil", XmlSerializerBase.XsiNamespace, "true"); } writer.WriteEndElement(); } }
public static T Deserialize <T>(XmlReader reader) { if (typeof(XmlSerializable).IsAssignableFrom(typeof(T))) { var obj = (T)Activator.CreateInstance(typeof(T), nonPublic: true); ((XmlSerializable)(object)obj).ReadXml(reader, validateRoot: true); return(obj); } else { var serializer = new XmlSerializable <T>( (T)Activator.CreateInstance(typeof(T), nonPublic: true) ); serializer.ReadXml(reader, validateRoot: true); return(serializer.Instance); } }