Fix JsonWriter.WriteToken to allow null with string token (#2472)

This commit is contained in:
James Newton-King
2021-02-21 13:09:54 +13:00
committed by GitHub
parent 926d2f0f42
commit 15525f1c44
3 changed files with 30 additions and 4 deletions
@@ -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]
@@ -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));
}
}
}
+3 -2
View File
@@ -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));