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