Skip to content

Commit b1b1947

Browse files
committed
Handle scenario when Timestamp is null
1 parent 397b6c3 commit b1b1947

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

src/Protobuf.System.Text.Json/WellKnownTypesConverters/TimestampConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal class TimestampConverter : JsonConverter<Timestamp?>
1111

1212
public override Timestamp? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
1313
{
14-
if (reader.TryGetDateTime(out var dateTime))
14+
if (reader.TokenType == JsonTokenType.String && reader.TryGetDateTime(out var dateTime))
1515
{
1616
return dateTime.ToTimestamp();
1717
}

test/Protobuf.System.Text.Json.Tests/MessageWithTimestampTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Text.Json;
33
using System.Text.Json.Protobuf.Tests;
4+
using System.Text.Json.Serialization;
45
using Google.Protobuf.WellKnownTypes;
56
using Protobuf.System.Text.Json.Tests.Utils;
67
using Shouldly;
@@ -80,4 +81,21 @@ public void Should_serialize_and_deserialize_message_with_timestamp_when_value_i
8081
deserialized.ShouldNotBeNull();
8182
deserialized.ShouldBeEquivalentTo(msg);
8283
}
84+
85+
[Fact]
86+
public void Should_serialize_and_deserialize_message_with_timestamp_when_value_is_set_to_null()
87+
{
88+
// Arrange
89+
var msg = new MessageWithTimestamp();
90+
var jsonSerializerOptions = TestHelper.CreateJsonSerializerOptions();
91+
jsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.Never;
92+
93+
// Act
94+
var serialized = JsonSerializer.Serialize(msg, jsonSerializerOptions);
95+
var deserialized = JsonSerializer.Deserialize<MessageWithTimestamp>(serialized, jsonSerializerOptions);
96+
97+
// Assert
98+
deserialized.ShouldNotBeNull();
99+
deserialized.ShouldBeEquivalentTo(msg);
100+
}
83101
}

0 commit comments

Comments
 (0)