From 779feeb571cc2baa597e692a2af1521ddcc31923 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Feb 2026 00:29:05 +0000 Subject: [PATCH 1/3] Initial plan From 45dcd3573f7c05923f3085a30d13ff323a9d4038 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 4 Feb 2026 00:33:26 +0000 Subject: [PATCH 2/3] Add JsonConstructor attributes and tests for Date and Time deserialization Co-authored-by: gavinbarron <7122716+gavinbarron@users.noreply.github.com> --- src/abstractions/Date.cs | 2 + .../Microsoft.Kiota.Abstractions.csproj | 1 + src/abstractions/Time.cs | 2 + tests/abstractions/DateTests.cs | 55 +++++++++++++++++++ tests/abstractions/TimeTests.cs | 38 +++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 tests/abstractions/DateTests.cs diff --git a/src/abstractions/Date.cs b/src/abstractions/Date.cs index d78a20fd..ff3f5aa3 100644 --- a/src/abstractions/Date.cs +++ b/src/abstractions/Date.cs @@ -3,6 +3,7 @@ // ------------------------------------------------------------------------------ using System; +using System.Text.Json.Serialization; namespace Microsoft.Kiota.Abstractions { @@ -42,6 +43,7 @@ public Date(DateTime dateTime) /// The year. /// The month. /// The day of the month. + [JsonConstructor] public Date(int year, int month, int day) : this(new DateTime(year, month, day)) { diff --git a/src/abstractions/Microsoft.Kiota.Abstractions.csproj b/src/abstractions/Microsoft.Kiota.Abstractions.csproj index 49ba46ad..c83fc5e3 100644 --- a/src/abstractions/Microsoft.Kiota.Abstractions.csproj +++ b/src/abstractions/Microsoft.Kiota.Abstractions.csproj @@ -20,5 +20,6 @@ + \ No newline at end of file diff --git a/src/abstractions/Time.cs b/src/abstractions/Time.cs index a508bff0..d0707cb3 100644 --- a/src/abstractions/Time.cs +++ b/src/abstractions/Time.cs @@ -3,6 +3,7 @@ // ------------------------------------------------------------------------------ using System; +using System.Text.Json.Serialization; namespace Microsoft.Kiota.Abstractions { @@ -55,6 +56,7 @@ public override int GetHashCode() /// The hour. /// The minute. /// The second. + [JsonConstructor] public Time(int hour, int minute, int second) : this(new DateTime(1, 1, 1, hour, minute, second)) { diff --git a/tests/abstractions/DateTests.cs b/tests/abstractions/DateTests.cs new file mode 100644 index 00000000..8ae48965 --- /dev/null +++ b/tests/abstractions/DateTests.cs @@ -0,0 +1,55 @@ +using System; +using System.Text.Json; +using Xunit; + +namespace Microsoft.Kiota.Abstractions.Tests +{ + public class DateTests + { + [Fact] + public void TestDateSerialization() + { + var date = new Date(2025, 10, 24); + var serialized = JsonSerializer.Serialize(date); + + // System.Text.Json should serialize the Date object with its properties + Assert.Contains("\"Year\":2025", serialized); + Assert.Contains("\"Month\":10", serialized); + Assert.Contains("\"Day\":24", serialized); + } + + [Fact] + public void TestDateDeserialization() + { + // This is the issue scenario - deserializing a Date object from JSON + var json = "{\"DateTime\":\"2025-10-24T10:18:54.5003283-05:00\",\"Year\":2025,\"Month\":10,\"Day\":24}"; + var date = JsonSerializer.Deserialize(json); + + Assert.Equal(2025, date.Year); + Assert.Equal(10, date.Month); + Assert.Equal(24, date.Day); + } + + [Fact] + public void TestDateRoundTrip() + { + // Test that we can serialize and deserialize a Date object + var original = new Date(2025, 10, 24); + var serialized = JsonSerializer.Serialize(original); + var deserialized = JsonSerializer.Deserialize(serialized); + + Assert.Equal(original.Year, deserialized.Year); + Assert.Equal(original.Month, deserialized.Month); + Assert.Equal(original.Day, deserialized.Day); + } + + [Fact] + public void TestDateToString() + { + var date = new Date(2025, 10, 24); + var expectedString = "2025-10-24"; + + Assert.Equal(expectedString, date.ToString()); + } + } +} diff --git a/tests/abstractions/TimeTests.cs b/tests/abstractions/TimeTests.cs index a4ac1a87..f1e76933 100644 --- a/tests/abstractions/TimeTests.cs +++ b/tests/abstractions/TimeTests.cs @@ -1,4 +1,5 @@ using System; +using System.Text.Json; using Xunit; namespace Microsoft.Kiota.Abstractions.Tests @@ -24,5 +25,42 @@ public void TestTimeToString() Assert.Equal(expectedString, time.ToString()); } + + [Fact] + public void TestTimeSerialization() + { + var time = new Time(10, 18, 54); + var serialized = JsonSerializer.Serialize(time); + + // System.Text.Json should serialize the Time object with its properties + Assert.Contains("\"Hour\":10", serialized); + Assert.Contains("\"Minute\":18", serialized); + Assert.Contains("\"Second\":54", serialized); + } + + [Fact] + public void TestTimeDeserialization() + { + // This is the issue scenario - deserializing a Time object from JSON + var json = "{\"DateTime\":\"2025-10-24T10:18:54.5090402-05:00\",\"Hour\":10,\"Minute\":18,\"Second\":54}"; + var time = JsonSerializer.Deserialize