diff --git a/src/SignalR/common/Protocols.Json/src/Protocol/JsonHubProtocol.cs b/src/SignalR/common/Protocols.Json/src/Protocol/JsonHubProtocol.cs index a0bb6df6c2..45870709d8 100644 --- a/src/SignalR/common/Protocols.Json/src/Protocol/JsonHubProtocol.cs +++ b/src/SignalR/common/Protocols.Json/src/Protocol/JsonHubProtocol.cs @@ -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, diff --git a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs index 6f9ba5cb60..712e0dcae8 100644 --- a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs +++ b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs @@ -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, } diff --git a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTestsBase.cs b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTestsBase.cs index a38ad6e3e7..6534bf8805 100644 --- a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTestsBase.cs +++ b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTestsBase.cs @@ -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 MessageSizeData => new[] { new MessageSizeTestData("InvocationMessage_WithoutInvocationId", new InvocationMessage("Target", new object[] { 1 }), 45),