예제 #1
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);
                }
            }
        }
예제 #2
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);
                }
            }
        }
        private static bool JsonSerializeFloatingPointType(this JsonWriter writer,
                                                           string name,
                                                           object value)
        {
            if (value is double)
            {
                if (null == name)
                {
                    writer.ArrayValue((double)value);
                }
                else
                {
                    writer.Pair(name, (double)value);
                }

                return(true);
            }

            if (value is float)
            {
                if (null == name)
                {
                    writer.ArrayValue((float)value);
                }
                else
                {
                    writer.Pair(name, (float)value);
                }

                return(true);
            }

            return(false);
        }
예제 #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);
                }
            }
        }
        private static bool JsonSerializeBuiltInType(this JsonWriter writer,
                                                     string name,
                                                     object value)
        {
            if (writer.JsonSerializeIntegralType(name, value))
            {
                return(true);
            }

            if (writer.JsonSerializeFloatingPointType(name, value))
            {
                return(true);
            }

            if (value is bool)
            {
                if (null == name)
                {
                    writer.ArrayValue((bool)value);
                }
                else
                {
                    writer.Pair(name, (bool)value);
                }

                return(true);
            }

            if (value is decimal)
            {
                if (null == name)
                {
                    writer.ArrayValue((decimal)value);
                }
                else
                {
                    writer.Pair(name, (decimal)value);
                }

                return(true);
            }

            var str = value as string;

            if (null != str)
            {
                if (null == name)
                {
                    writer.ArrayValue(str);
                }
                else
                {
                    writer.Pair(name, str);
                }

                return(true);
            }

            return(false);
        }
예제 #6
0
        public virtual void WriteJson(JsonWriter writer)
        {
            if (null == writer)
            {
                throw new ArgumentNullException("writer");
            }

            foreach (var pair in this)
            {
                var obj = pair.Value as IJsonSerializable;
                if (null != obj)
                {
                    writer.Pair(pair.Name, obj);
                    continue;
                }

                var number = pair.Value as JsonNumber;
                if (null != number)
                {
                    writer.NumberPair(pair.Name, number.Value);
                    continue;
                }

                var str = pair.Value as JsonString;
                if (null != str)
                {
                    writer.Pair(pair.Name, str.Value);
                    continue;
                }

                var array = pair.Value as JsonArray;
                if (null != array)
                {
                    WriteJsonArray(writer, pair.Name, array);
                    continue;
                }

                if (pair.Value is JsonNull)
                {
                    writer.NullPair(pair.Name);
                }
                else if (pair.Value is JsonTrue)
                {
                    writer.Pair(pair.Name, true);
                }
                else if (pair.Value is JsonFalse)
                {
                    writer.Pair(pair.Name, false);
                }
            }
        }
예제 #7
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);
                }
            }
        }
예제 #8
0
        public void op_Pair_stringNull_string()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws <ArgumentNullException>(() => writer.Pair(null, "value"));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
예제 #9
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
                }
            }
        }
예제 #10
0
        public void op_Object_whenAfterPair()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("one", 1);

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

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
예제 #11
0
        public void op_Pair_string_TimeSpan(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("example", new TimeSpan(0, 17, 9, 43, 89));
                    writer.EndObject();
                }

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

                    Assert.Equal(expected, actual);
                }
            }
        }
예제 #12
0
        public void op_Pair_string_DateTime(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("example", new DateTime(2011, 7, 14, 19, 43, 37, DateTimeKind.Utc));
                    writer.EndObject();
                }

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

                    Assert.Equal(expected, actual);
                }
            }
        }
예제 #13
0
        public void op_StringPair_string_string(string value,
                                                string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("example", value);
                    writer.EndObject();
                }

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

                    Assert.Equal(expected, actual);
                }
            }
        }
예제 #14
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);
                }
            }
        }
예제 #15
0
        public void op_Object_whenAfterPair()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("one", 1);

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

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
        private static bool JsonSerializeIntegralType(this JsonWriter writer,
                                                      string name,
                                                      object value)
        {
            if (value is byte)
            {
                if (null == name)
                {
                    writer.ArrayValue((byte)value);
                }
                else
                {
                    writer.Pair(name, (byte)value);
                }

                return(true);
            }

            if (value is char)
            {
                if (null == name)
                {
                    writer.ArrayValue((char)value);
                }
                else
                {
                    writer.Pair(name, (char)value);
                }

                return(true);
            }

            if (value is short)
            {
                if (null == name)
                {
                    writer.ArrayValue((short)value);
                }
                else
                {
                    writer.Pair(name, (short)value);
                }

                return(true);
            }

            if (value is int)
            {
                if (null == name)
                {
                    writer.ArrayValue((int)value);
                }
                else
                {
                    writer.Pair(name, (int)value);
                }

                return(true);
            }

            if (value is long)
            {
                if (null == name)
                {
                    writer.ArrayValue((long)value);
                }
                else
                {
                    writer.Pair(name, (long)value);
                }

                return(true);
            }

            return(false);
        }
        private static bool JsonSerializeBaseClassLibraryType(this JsonWriter writer,
                                                              string name,
                                                              object value)
        {
            if (null == value)
            {
                if (null == name)
                {
                    writer.ArrayNull();
                }
                else
                {
                    writer.NullPair(name);
                }

                return(true);
            }

            if (writer.JsonSerializeBuiltInType(name, value))
            {
                return(true);
            }

            if (value is DateTime)
            {
                if (null == name)
                {
                    writer.ArrayValue((DateTime)value);
                }
                else
                {
                    writer.Pair(name, (DateTime)value);
                }

                return(true);
            }

            if (value is DateTimeOffset)
            {
                if (null == name)
                {
                    writer.ArrayValue((DateTimeOffset)value);
                }
                else
                {
                    writer.Pair(name, (DateTimeOffset)value);
                }

                return(true);
            }

            if (value is Guid)
            {
                if (null == name)
                {
                    writer.ArrayValue((Guid)value);
                }
                else
                {
                    writer.Pair(name, (Guid)value);
                }

                return(true);
            }

            if (value is TimeSpan)
            {
                if (null == name)
                {
                    writer.ArrayValue((TimeSpan)value);
                }
                else
                {
                    writer.Pair(name, (TimeSpan)value);
                }

                return(true);
            }

            if (value is Enum)
            {
                if (null == name)
                {
                    writer.ArrayValue(value.ToString());
                }
                else
                {
                    writer.Pair(name, value.ToString());
                }

                return(true);
            }

            var uri = value as Uri;

            if (null != uri)
            {
                if (null == name)
                {
                    writer.ArrayValue(uri);
                }
                else
                {
                    writer.Pair(name, uri);
                }

                return(true);
            }

            if (0 == value.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Length)
            {
                if (null == name)
                {
                    writer.ArrayValue(value.ToString());
                }
                else
                {
                    writer.Pair(name, value.ToString());
                }

                return(true);
            }

            return(false);
        }
예제 #18
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);
                }
            }
        }
예제 #19
0
        public void op_StringPair_string_string(string value,
                                                string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("example", value);
                    writer.EndObject();
                }

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

                    Assert.Equal(expected, actual);
                }
            }
        }
예제 #20
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);
                }
            }
        }
예제 #21
0
        public void op_Pair_string_TimeSpan(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("example", new TimeSpan(0, 17, 9, 43, 89));
                    writer.EndObject();
                }

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

                    Assert.Equal(expected, actual);
                }
            }
        }
예제 #22
0
        public void op_Pair_string_DateTime(string expected)
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    writer.Object();
                    writer.Pair("example", new DateTime(2011, 7, 14, 19, 43, 37, DateTimeKind.Utc));
                    writer.EndObject();
                }

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

                    Assert.Equal(expected, actual);
                }
            }
        }
예제 #23
0
        public void op_Pair_stringNull_string()
        {
            using (var stream = new MemoryStream())
            {
                using (var writer = new JsonWriter(stream))
                {
                    // ReSharper disable AccessToDisposedClosure
                    Assert.Throws<ArgumentNullException>(() => writer.Pair(null, "value"));

                    // ReSharper restore AccessToDisposedClosure
                }
            }
        }
예제 #24
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
                }
            }
        }
예제 #25
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);
                }
            }
        }