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); } } }
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); } } }
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); } } }
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); } } }
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); } } }
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(); } }
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 } } }
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 } } }
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 } } }
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 } } }
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); } } }
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); } } }
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()); } } }
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); } } }
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 } } }
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); } } }
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); } } }
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); } } }
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 } } }
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); } } }
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); } } }
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); } } }
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); } } }
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 } } }
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(); }
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(); }
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 } } }