diff --git a/Src/Newtonsoft.Json.Tests/JsonTextWriterTest.cs b/Src/Newtonsoft.Json.Tests/JsonTextWriterTest.cs index b3bdd4d9..f0c46233 100644 --- a/Src/Newtonsoft.Json.Tests/JsonTextWriterTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonTextWriterTest.cs @@ -945,13 +945,15 @@ namespace Newtonsoft.Json.Tests jsonWriter.WriteToken(JsonToken.StartArray); jsonWriter.WriteToken(JsonToken.Integer, 1); jsonWriter.WriteToken(JsonToken.StartObject); - jsonWriter.WriteToken(JsonToken.PropertyName, "string"); + jsonWriter.WriteToken(JsonToken.PropertyName, "integer"); jsonWriter.WriteToken(JsonToken.Integer, int.MaxValue); + jsonWriter.WriteToken(JsonToken.PropertyName, "null-string"); + jsonWriter.WriteToken(JsonToken.String, null); jsonWriter.WriteToken(JsonToken.EndObject); jsonWriter.WriteToken(JsonToken.EndArray); } - Assert.AreEqual(@"[1,{""string"":2147483647}]", sb.ToString()); + Assert.AreEqual(@"[1,{""integer"":2147483647,""null-string"":null}]", sb.ToString()); } [Test] diff --git a/Src/Newtonsoft.Json.Tests/Linq/JTokenWriterTest.cs b/Src/Newtonsoft.Json.Tests/Linq/JTokenWriterTest.cs index d8d7dbe5..18d195eb 100644 --- a/Src/Newtonsoft.Json.Tests/Linq/JTokenWriterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Linq/JTokenWriterTest.cs @@ -392,5 +392,28 @@ namespace Newtonsoft.Json.Tests.Linq Assert.AreEqual(new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc), dt); } + + [Test] + public void WriteTokenDirect() + { + JToken token; + + using (JTokenWriter jsonWriter = new JTokenWriter()) + { + jsonWriter.WriteToken(JsonToken.StartArray); + jsonWriter.WriteToken(JsonToken.Integer, 1); + jsonWriter.WriteToken(JsonToken.StartObject); + jsonWriter.WriteToken(JsonToken.PropertyName, "integer"); + jsonWriter.WriteToken(JsonToken.Integer, int.MaxValue); + jsonWriter.WriteToken(JsonToken.PropertyName, "null-string"); + jsonWriter.WriteToken(JsonToken.String, null); + jsonWriter.WriteToken(JsonToken.EndObject); + jsonWriter.WriteToken(JsonToken.EndArray); + + token = jsonWriter.Token; + } + + Assert.AreEqual(@"[1,{""integer"":2147483647,""null-string"":null}]", token.ToString(Formatting.None)); + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/JsonWriter.cs b/Src/Newtonsoft.Json/JsonWriter.cs index d9121f61..a68fc8c4 100644 --- a/Src/Newtonsoft.Json/JsonWriter.cs +++ b/Src/Newtonsoft.Json/JsonWriter.cs @@ -579,8 +579,9 @@ namespace Newtonsoft.Json } break; case JsonToken.String: - ValidationUtils.ArgumentNotNull(value, nameof(value)); - WriteValue(value.ToString()); + // Allow for a null string. This matches JTokenReader behavior which can read + // a JsonToken.String with a null value. + WriteValue(value?.ToString()); break; case JsonToken.Boolean: ValidationUtils.ArgumentNotNull(value, nameof(value));