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());
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
 public void AddFormater <T>(IObjectSerializerFormater formater)
 {
     Formaters[typeof(T)] = formater;
 }
Exemple #5
0
 public void AddFormater(Type t, IObjectSerializerFormater formater)
 {
     Formaters[t] = formater;
 }