Skip to content

Commit 15525f1

Browse files
authored
Fix JsonWriter.WriteToken to allow null with string token (#2472)
1 parent 926d2f0 commit 15525f1

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

Src/Newtonsoft.Json.Tests/JsonTextWriterTest.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -945,13 +945,15 @@ public void WriteTokenDirect()
945945
jsonWriter.WriteToken(JsonToken.StartArray);
946946
jsonWriter.WriteToken(JsonToken.Integer, 1);
947947
jsonWriter.WriteToken(JsonToken.StartObject);
948-
jsonWriter.WriteToken(JsonToken.PropertyName, "string");
948+
jsonWriter.WriteToken(JsonToken.PropertyName, "integer");
949949
jsonWriter.WriteToken(JsonToken.Integer, int.MaxValue);
950+
jsonWriter.WriteToken(JsonToken.PropertyName, "null-string");
951+
jsonWriter.WriteToken(JsonToken.String, null);
950952
jsonWriter.WriteToken(JsonToken.EndObject);
951953
jsonWriter.WriteToken(JsonToken.EndArray);
952954
}
953955

954-
Assert.AreEqual(@"[1,{""string"":2147483647}]", sb.ToString());
956+
Assert.AreEqual(@"[1,{""integer"":2147483647,""null-string"":null}]", sb.ToString());
955957
}
956958

957959
[Test]

Src/Newtonsoft.Json.Tests/Linq/JTokenWriterTest.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,5 +392,28 @@ public void DateTimeZoneHandling()
392392

393393
Assert.AreEqual(new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Utc), dt);
394394
}
395+
396+
[Test]
397+
public void WriteTokenDirect()
398+
{
399+
JToken token;
400+
401+
using (JTokenWriter jsonWriter = new JTokenWriter())
402+
{
403+
jsonWriter.WriteToken(JsonToken.StartArray);
404+
jsonWriter.WriteToken(JsonToken.Integer, 1);
405+
jsonWriter.WriteToken(JsonToken.StartObject);
406+
jsonWriter.WriteToken(JsonToken.PropertyName, "integer");
407+
jsonWriter.WriteToken(JsonToken.Integer, int.MaxValue);
408+
jsonWriter.WriteToken(JsonToken.PropertyName, "null-string");
409+
jsonWriter.WriteToken(JsonToken.String, null);
410+
jsonWriter.WriteToken(JsonToken.EndObject);
411+
jsonWriter.WriteToken(JsonToken.EndArray);
412+
413+
token = jsonWriter.Token;
414+
}
415+
416+
Assert.AreEqual(@"[1,{""integer"":2147483647,""null-string"":null}]", token.ToString(Formatting.None));
417+
}
395418
}
396419
}

Src/Newtonsoft.Json/JsonWriter.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,8 +579,9 @@ public void WriteToken(JsonToken token, object? value)
579579
}
580580
break;
581581
case JsonToken.String:
582-
ValidationUtils.ArgumentNotNull(value, nameof(value));
583-
WriteValue(value.ToString());
582+
// Allow for a null string. This matches JTokenReader behavior which can read
583+
// a JsonToken.String with a null value.
584+
WriteValue(value?.ToString());
584585
break;
585586
case JsonToken.Boolean:
586587
ValidationUtils.ArgumentNotNull(value, nameof(value));

0 commit comments

Comments
 (0)