Fix JsonWriter.WriteToken to allow null with string token (#2472)
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user