Ejemplo n.º 1
0
        public void write_object_with_nested_arrays(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("list");
                    writer.ArrayValue(true);
                    writer.Array();
                    writer.ArrayValue(1);
                    writer.ArrayValue(2);
                    writer.ArrayValue(3);
                    writer.EndArray();
                    writer.ArrayValue(false);
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 2
0
        public void write_object_with_array(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayNull();
                    writer.ArrayNumber("1");
                    writer.ArrayValue(2L);
                    writer.ArrayValue(3m);
                    writer.ArrayValue(4d);
                    writer.ArrayValue(" ");
                    writer.ArrayValue(true);
                    writer.Object();
                    writer.Pair("one", 1);
                    writer.EndObject();
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 3
0
        public void write_object_with_array_of_objects(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.Object();
                    writer.Pair("one", 1);
                    writer.EndObject();
                    writer.Object();
                    writer.Pair("two", 2);
                    writer.EndObject();
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 4
0
        public void write_pretty_object(string json)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream, JsonWriterSettings.Debug))
                {
                    writer.Object();
                    writer.Pair("id", 123);
                    writer.Pair("title", string.Empty);
                    writer.NullPair("value");
                    writer.Array("list");
                    writer.ArrayValue(1);
                    writer.ArrayValue(string.Empty);
                    writer.ArrayNull();
                    writer.ArrayValue(true);
                    writer.ArrayValue(false);
                    writer.EndArray();
                    writer.Pair("visible", true);
                    writer.Pair("enabled", false);
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var expected = new FileInfo(json).ReadToEnd();
                    var actual   = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 5
0
        public void write_object_with_pairs(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("id", 123);
                    writer.Pair("title", string.Empty);
                    writer.NullPair("value");
                    writer.Array("list");
                    writer.ArrayValue(1);
                    writer.ArrayValue(string.Empty);
                    writer.ArrayNull();
                    writer.ArrayValue(true);
                    writer.ArrayValue(false);
                    writer.EndArray();
                    writer.Pair("visible", true);
                    writer.Pair("enabled", false);
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 6
0
        public void WriteJson(JsonWriter writer)
        {
            if (null == writer)
            {
                throw new ArgumentNullException("writer");
            }

            if (0 == Count)
            {
                return;
            }

            if (1 < Count)
            {
                writer.Array();
            }

            foreach (IJsonSerializable item in this)
            {
                writer.Object();
                item.WriteJson(writer);
                writer.EndObject();
            }

            if (1 < Count)
            {
                writer.EndArray();
            }
        }
Ejemplo n.º 7
0
        public void op_Array_string_whenRoot()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws <InvalidOperationException>(() => writer.Array("example"));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 8
0
        public void op_Array_stringNull()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws <ArgumentNullException>(() => writer.Array(null));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 9
0
        public void op_ArrayNumber_stringEmpty(string value)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws <ArgumentOutOfRangeException>(() => writer.ArrayNumber(value));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 10
0
        public void op_Pair_string_bool_whenArrayParent()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws <InvalidOperationException>(() => writer.Pair("name", true));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 11
0
        public void write_empty_array(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Array();
                    writer.EndArray();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 12
0
        public void op_ArrayValue_DateTime(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayValue(new DateTime(2011, 7, 14, 19, 43, 37, DateTimeKind.Utc));
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 13
0
        public void op_ArrayValue_long(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayValue(12345L);
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
        public static string JsonSerialize(this object value,
                                           JsonWriterSettings settings)
        {
            if (null == value)
            {
                return null;
            }

            if (null == settings)
            {
                throw new ArgumentNullException("settings");
            }

            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream, settings))
                {
                    var list = value as IEnumerable;
                    if (value.GetType().IsArray)
                    {
                        writer.Array();
                        writer.JsonSerializeList(list);
                    }
                    else
                    {
                        writer.Object();
                        writer.JsonSerializeObject(value);
                    }
                }

                using (var reader = new StreamReader(stream))
                {
                    return reader.ReadToEnd();
                }
            }
        }
        public static string JsonSerialize(this object value,
                                           JsonWriterSettings settings)
        {
            if (null == value)
            {
                return(null);
            }

            if (null == settings)
            {
                throw new ArgumentNullException("settings");
            }

            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream, settings))
                {
                    var list = value as IEnumerable;
                    if (value.GetType().IsArray)
                    {
                        writer.Array();
                        writer.JsonSerializeList(list);
                    }
                    else
                    {
                        writer.Object();
                        writer.JsonSerializeObject(value);
                    }
                }

                using (var reader = new StreamReader(stream))
                {
                    return(reader.ReadToEnd());
                }
            }
        }
Ejemplo n.º 16
0
        public void write_empty_array(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Array();
                    writer.EndArray();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 17
0
        public void op_Array_whenNotRoot()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws<InvalidOperationException>(() => writer.Array());

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 18
0
        public void write_object_with_array_of_objects(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.Object();
                    writer.Pair("one", 1);
                    writer.EndObject();
                    writer.Object();
                    writer.Pair("two", 2);
                    writer.EndObject();
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 19
0
        public void write_object_with_array(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayNull();
                    writer.ArrayNumber("1");
                    writer.ArrayValue(2L);
                    writer.ArrayValue(3m);
                    writer.ArrayValue(4d);
                    writer.ArrayValue(" ");
                    writer.ArrayValue(true);
                    writer.Object();
                    writer.Pair("one", 1);
                    writer.EndObject();
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 20
0
        public void write_object_with_nested_arrays(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("list");
                    writer.ArrayValue(true);
                    writer.Array();
                    writer.ArrayValue(1);
                    writer.ArrayValue(2);
                    writer.ArrayValue(3);
                    writer.EndArray();
                    writer.ArrayValue(false);
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 21
0
        public void op_ArrayNumber_stringEmpty(string value)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws<ArgumentOutOfRangeException>(() => writer.ArrayNumber(value));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 22
0
        public void write_pretty_object(string json)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream, JsonWriterSettings.Debug))
                {
                    writer.Object();
                    writer.Pair("id", 123);
                    writer.Pair("title", string.Empty);
                    writer.NullPair("value");
                    writer.Array("list");
                    writer.ArrayValue(1);
                    writer.ArrayValue(string.Empty);
                    writer.ArrayNull();
                    writer.ArrayValue(true);
                    writer.ArrayValue(false);
                    writer.EndArray();
                    writer.Pair("visible", true);
                    writer.Pair("enabled", false);
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var expected = new FileInfo(json).ReadToEnd();
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 23
0
        public void write_object_with_pairs(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("id", 123);
                    writer.Pair("title", string.Empty);
                    writer.NullPair("value");
                    writer.Array("list");
                    writer.ArrayValue(1);
                    writer.ArrayValue(string.Empty);
                    writer.ArrayNull();
                    writer.ArrayValue(true);
                    writer.ArrayValue(false);
                    writer.EndArray();
                    writer.Pair("visible", true);
                    writer.Pair("enabled", false);
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 24
0
        public void op_ArrayValue_DateTime(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayValue(new DateTime(2011, 7, 14, 19, 43, 37, DateTimeKind.Utc));
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 25
0
        public void op_ArrayValue_TimeSpan(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayValue(new TimeSpan(0, 17, 9, 43, 89));
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
Ejemplo n.º 26
0
        public void op_Array_stringNull()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws<ArgumentNullException>(() => writer.Array(null));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
Ejemplo n.º 27
0
        public void op_ArrayNumber_string(string value,
                                          string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");
                    writer.ArrayNumber(value);
                    writer.EndArray();
                    writer.EndObject();
                }

                using (var reader = new StreamReader(stream))
                {
                    var actual = reader.ReadToEnd();

                    Assert.Equal(expected, actual);
                }
            }
        }
        private static void JsonSerializeObject(this JsonWriter writer,
                                                object obj)
        {
            if (null == obj)
            {
                return;
            }

            var properties = obj
                             .GetType()
                             .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                             .ToList();

            foreach (var property in properties)
            {
                if (!property.CanRead)
                {
                    continue;
                }

                if (0 != property.GetIndexParameters().Length)
                {
                    continue;
                }

                var ignore = property.GetCustomAttributes(typeof(JsonIgnoreAttribute), true);
                if (0 != ignore.Length)
                {
                    continue;
                }

                var name = property.Name.ToCamelCase();
                foreach (JsonNameAttribute attribute in property.GetCustomAttributes(typeof(JsonNameAttribute), true))
                {
                    name = attribute.Name;
                }

                var value = property.GetValue(obj, null);

                if (writer.JsonSerializeBaseClassLibraryType(name, value))
                {
                    continue;
                }

                writer.Object(name);

                var serializable = value as IJsonSerializable;
                if (null == serializable)
                {
                    writer.JsonSerializeObject(value);
                }
                else
                {
                    serializable.WriteJson(writer);
                    writer.EndObject();
                }
            }

            var list = obj as IEnumerable;

            if (null != list)
            {
                writer.Array(writer.Settings.ItemsName);
                foreach (var item in list)
                {
                    if (writer.JsonSerializeBaseClassLibraryType(null, item))
                    {
                        continue;
                    }

                    writer.Object();
                    writer.JsonSerializeObject(item);
                }

                writer.EndArray();
            }

            writer.EndObject();
        }
Ejemplo n.º 29
0
        private static void WriteJsonArray(JsonWriter writer,
                                           string name,
                                           JsonArray value)
        {
            if (null == name)
            {
                writer.Array();
            }
            else
            {
                writer.Array(name);
            }

            foreach (var item in value.Values)
            {
                var obj = item as IJsonSerializable;
                if (null != obj)
                {
                    writer.Object();
                    obj.WriteJson(writer);
                    writer.EndObject();
                    continue;
                }

                var number = item as JsonNumber;
                if (null != number)
                {
                    writer.ArrayNumber(number.Value);
                    continue;
                }

                var str = item as JsonString;
                if (null != str)
                {
                    writer.ArrayValue(str.Value);
                    continue;
                }

                var array = item as JsonArray;
                if (null != array)
                {
                    WriteJsonArray(writer, null, array);
                    continue;
                }

                if (item is JsonNull)
                {
                    writer.ArrayNull();
                }
                else if (item is JsonTrue)
                {
                    writer.ArrayValue(true);
                }
                else if (item is JsonFalse)
                {
                    writer.ArrayValue(false);
                }
            }

            writer.EndArray();
        }
Ejemplo n.º 30
0
        public void op_Pair_string_bool_whenArrayParent()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Array("example");

                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws<InvalidOperationException>(() => writer.Pair("name", true));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }