Skip to content

Commit f6bc908

Browse files
Write default values by default in Json (#23542)
1 parent a57a80f commit f6bc908

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

src/SignalR/common/Protocols.Json/src/Protocol/JsonHubProtocol.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ internal static JsonSerializerOptions CreateDefaultSerializerSettings()
773773
WriteIndented = false,
774774
ReadCommentHandling = JsonCommentHandling.Disallow,
775775
AllowTrailingCommas = false,
776-
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault,
776+
DefaultIgnoreCondition = JsonIgnoreCondition.Never,
777777
IgnoreReadOnlyProperties = false,
778778
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
779779
PropertyNameCaseInsensitive = true,

src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ protected override IHubProtocol GetProtocolWithOptions(bool useCamelCase, bool i
2828
{
2929
PayloadSerializerOptions = new JsonSerializerOptions()
3030
{
31-
IgnoreNullValues = ignoreNullValues,
31+
DefaultIgnoreCondition = ignoreNullValues ? System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault : System.Text.Json.Serialization.JsonIgnoreCondition.Never,
3232
PropertyNamingPolicy = useCamelCase ? JsonNamingPolicy.CamelCase : null,
3333
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
3434
}

src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTestsBase.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,33 @@ public void ReadCaseInsensitivePropertiesByDefault()
314314
}, streamItemMessage.Item);
315315
}
316316

317+
[Fact]
318+
public void DefaultValuesAreWrittenByDefault()
319+
{
320+
var obj = new CustomObject()
321+
{
322+
ByteArrProp = new byte[] { 2, 4, 6 },
323+
IntProp = default,
324+
DoubleProp = 1.1,
325+
StringProp = "test",
326+
DateTimeProp = default
327+
};
328+
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\"}]}");
329+
330+
var writer = MemoryBufferWriter.Get();
331+
try
332+
{
333+
JsonHubProtocol.WriteMessage(new InvocationMessage("123", "Target", new object[] { obj }), writer);
334+
var json = Encoding.UTF8.GetString(writer.ToArray());
335+
336+
Assert.Equal(expectedOutput, json);
337+
}
338+
finally
339+
{
340+
MemoryBufferWriter.Return(writer);
341+
}
342+
}
343+
317344
public static IDictionary<string, MessageSizeTestData> MessageSizeData => new[]
318345
{
319346
new MessageSizeTestData("InvocationMessage_WithoutInvocationId", new InvocationMessage("Target", new object[] { 1 }), 45),

0 commit comments

Comments
 (0)