private static void RunObjectTreeTest(Type serializerType, Type messageType)
        {
            ISerializerAdapter serializer = (ISerializerAdapter)Activator.CreateInstance(serializerType);

            object message = catalog.CreateInstance(messageType);

            using (MemoryStream ms = new MemoryStream())
            {
                object output = null;
                bool ex = false;
                try
                {
                    serializer.Serialize(new IndisposableStream(ms), message);

                    ms.Flush();
                    ms.Seek(0, SeekOrigin.Begin);

                    output = serializer.Deserialize(new IndisposableStream(ms), messageType);
                }
                catch (Exception x)
                {
                    Assert.Inconclusive("The the serializer has at least thrown an exception instead of unexpected results {0}", x);
                    ex = true;
                }
                if (!ex)
                {
                    ObjectDataTree messageData = new ObjectDataTree(message);
                    ObjectDataTree outputData = new ObjectDataTree(output);

                    Assert.AreEqual(messageData.StringValue(), outputData.StringValue());
                    (message as IAssertEquality).AssertEquality(output);
                }
            }
        }
        private string StringValue(string prefix)
        {
            string name = string.IsNullOrEmpty(this.Name) ? string.Empty : string.Format("{0}:", this.Name);
            if (this.Instance == null)
            {
                return string.Format("{0}{1}\"NULL\"", prefix, name);
            }

            if (IsComparable(this.Type))
            {
                return string.Format("{0}{1}\"{2}\"", prefix, name, GetInstanceString(this.Instance).Replace("\"", "\\\""));
            }

            StringBuilder builder = new StringBuilder();

            if (typeof(IEnumerable).IsAssignableFrom(this.Type))
            {
                builder.AppendFormat("{0}{1}[\n", prefix, name);
                foreach (object item in this.Instance as IEnumerable)
                {
                    var obj = new ObjectDataTree(item);
                    builder.AppendLine(obj.StringValue(string.Concat(prefix, "\t")));
                }
                builder.AppendFormat("{0}]\n", prefix);
            }
            else
            {
                builder.AppendFormat("{0}{1}{{\n", prefix, name);
                foreach (var o in this.Fields)
                {
                    builder.AppendLine(o.StringValue(string.Concat(prefix, "\t")));
                }
                builder.AppendFormat("{0}}}\n", prefix);
            }
            return builder.ToString();
        }