protected void Serialize(object data, Type dataType, string prefix, Stack <object> visited) { bool didPush = false; if (data != null && (dataType != null && dataType.IsClass || dataType == null && data.GetType().IsClass)) { if (visited.Contains(data)) { throw new InvalidOperationException($"Circular object reference detected while serializing data. This is not supported. Data type is '{dataType}'"); } visited.Push(data); didPush = true; } IObjectSerializerFormater formater = Settings.Formaters.GetFormater(dataType); if (formater != null) { data = formater.Format(data); dataType = typeof(string); } if (data == null && Settings.IncludeNullValues) { SerializeSimpleValue(null, dataType, prefix); } else if (data == null && !Settings.IncludeNullValues) { return; } else if (typeof(IDictionary).IsAssignableFrom(dataType)) { SerializeDictionary((IDictionary)data, dataType, prefix, visited); } else if (typeof(NameValueCollection).IsAssignableFrom(dataType)) { SerializeNameValueCollection((NameValueCollection)data, dataType, prefix, visited); } else if (typeof(IList).IsAssignableFrom(dataType)) { SerializeList((IList)data, dataType, prefix, visited); } else if (typeof(IFile).IsAssignableFrom(dataType)) { SerializeFile((IFile)data, dataType, prefix); } else if (IsSimpleType(dataType)) { SerializeSimpleValue(data, dataType, prefix); } else { SerializeProperties(data, dataType, prefix, visited); } if (didPush) { visited.Pop(); } }
public void CanAddFormatersInVariousWays() { // Act MyObjectSerializerFormaterManager.AddFormater <Mail>(new MailObjectSerializerFormater()); MyObjectSerializerFormaterManager.AddFormater <bool>(b => b ? "yes" : "no"); // Act IObjectSerializerFormater f1 = MyObjectSerializerFormaterManager.GetFormater(typeof(Mail)); IObjectSerializerFormater f2 = MyObjectSerializerFormaterManager.GetFormater(typeof(bool)); // Assert Assert.IsNotNull(f1); Assert.IsNotNull(f2); Assert.AreEqual(typeof(MailObjectSerializerFormater), f1.GetType()); Assert.AreEqual(typeof(DelegateFormater <bool>), f2.GetType()); }
protected void Serialize(object data, Type dataType, string prefix) { IObjectSerializerFormater formater = Settings.Formaters.GetFormater(dataType); if (formater != null) { data = formater.Format(data); dataType = typeof(string); } if (data == null) { return; } if (typeof(IDictionary).IsAssignableFrom(dataType)) { SerializeDictionary((IDictionary)data, dataType, prefix); } else if (typeof(NameValueCollection).IsAssignableFrom(dataType)) { SerializeNameValueCollection((NameValueCollection)data, dataType, prefix); } else if (typeof(IList).IsAssignableFrom(dataType)) { SerializeList((IList)data, dataType, prefix); } else if (typeof(IFile).IsAssignableFrom(dataType)) { SerializeFile((IFile)data, dataType, prefix); } else if (IsSimpleType(dataType)) { SerializeSimpleValue(data, dataType, prefix); } else { SerializeProperties(data, dataType, prefix); } }
public void AddFormater <T>(IObjectSerializerFormater formater) { Formaters[typeof(T)] = formater; }
public void AddFormater(Type t, IObjectSerializerFormater formater) { Formaters[t] = formater; }