Write default values by default in Json (#23542)

This commit is contained in:
Brennan 2020-07-06 10:08:55 -07:00 committed by GitHub
parent a57a80fcfb
commit f6bc908a32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 2 deletions

View File

@ -773,7 +773,7 @@ namespace Microsoft.AspNetCore.SignalR.Protocol
WriteIndented = false,
ReadCommentHandling = JsonCommentHandling.Disallow,
AllowTrailingCommas = false,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
DefaultIgnoreCondition = JsonIgnoreCondition.Never,
IgnoreReadOnlyProperties = false,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true,

View File

@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
{
PayloadSerializerOptions = new JsonSerializerOptions()
{
IgnoreNullValues = ignoreNullValues,
DefaultIgnoreCondition = ignoreNullValues ? System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault : System.Text.Json.Serialization.JsonIgnoreCondition.Never,
PropertyNamingPolicy = useCamelCase ? JsonNamingPolicy.CamelCase : null,
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
}

View File

@ -314,6 +314,33 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
}, streamItemMessage.Item);
}
[Fact]
public void DefaultValuesAreWrittenByDefault()
{
var obj = new CustomObject()
{
ByteArrProp = new byte[] { 2, 4, 6 },
IntProp = default,
DoubleProp = 1.1,
StringProp = "test",
DateTimeProp = default
};
var expectedOutput = Frame("{\"type\":1,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"test\",\"doubleProp\":1.1,\"intProp\":0,\"dateTimeProp\":\"0001-01-01T00:00:00\",\"nullProp\":null,\"byteArrProp\":\"AgQG\"}]}");
var writer = MemoryBufferWriter.Get();
try
{
JsonHubProtocol.WriteMessage(new InvocationMessage("123", "Target", new object[] { obj }), writer);
var json = Encoding.UTF8.GetString(writer.ToArray());
Assert.Equal(expectedOutput, json);
}
finally
{
MemoryBufferWriter.Return(writer);
}
}
public static IDictionary<string, MessageSizeTestData> MessageSizeData => new[]
{
new MessageSizeTestData("InvocationMessage_WithoutInvocationId", new InvocationMessage("Target", new object[] { 1 }), 45),