From cc89b7afbb13c0df71def90d55457e271ea57d35 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Jun 2025 11:36:52 +0000 Subject: [PATCH 1/5] Initial plan for issue From 2f82de6073a01e775712d4fd8926a44205a0afa5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Jun 2025 11:40:28 +0000 Subject: [PATCH 2/5] Initial analysis and reproduction of ObjectToInferredTypesConverter issue Co-authored-by: gewarren <24882762+gewarren@users.noreply.github.com> --- .../snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj index 71d1233f72217..605353d9ef808 100644 --- a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj +++ b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj @@ -2,7 +2,7 @@ Exe - net9.0 + net8.0 SystemTextJsonHowTo.Program enable enable From 017635322ecdcfdb6ac2fdee71bf315f79593aaa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Jun 2025 11:44:22 +0000 Subject: [PATCH 3/5] Fix ObjectToInferredTypesConverter stack overflow when serializing object Co-authored-by: gewarren <24882762+gewarren@users.noreply.github.com> --- .../csharp/CustomConverterInferredTypesToObject.cs | 14 ++++++++++++-- .../how-to-contd/csharp/SystemTextJsonHowTo.csproj | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs index aa4ef9ee74199..d6c6f9ab04e2b 100644 --- a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs +++ b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs @@ -22,8 +22,18 @@ JsonTokenType.String when reader.TryGetDateTime(out DateTime datetime) => dateti public override void Write( Utf8JsonWriter writer, object objectToWrite, - JsonSerializerOptions options) => - JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); + JsonSerializerOptions options) + { + var valueType = objectToWrite.GetType(); + if (valueType == typeof(object)) + { + writer.WriteStartObject(); + writer.WriteEndObject(); + return; + } + + JsonSerializer.Serialize(writer, objectToWrite, valueType, options); + } } public class WeatherForecast diff --git a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj index 605353d9ef808..71d1233f72217 100644 --- a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj +++ b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/SystemTextJsonHowTo.csproj @@ -2,7 +2,7 @@ Exe - net8.0 + net9.0 SystemTextJsonHowTo.Program enable enable From 5f0ff062ee6f35986603528e5e1dfd35becd733a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Jun 2025 16:02:52 +0000 Subject: [PATCH 4/5] Simplify ObjectToInferredTypesConverter by removing intermediate variable Co-authored-by: BillWagner <493969+BillWagner@users.noreply.github.com> --- .../csharp/CustomConverterInferredTypesToObject.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs index d6c6f9ab04e2b..e1b11f71f2036 100644 --- a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs +++ b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs @@ -24,15 +24,14 @@ public override void Write( object objectToWrite, JsonSerializerOptions options) { - var valueType = objectToWrite.GetType(); - if (valueType == typeof(object)) + if (objectToWrite.GetType() == typeof(object)) { writer.WriteStartObject(); writer.WriteEndObject(); return; } - JsonSerializer.Serialize(writer, objectToWrite, valueType, options); + JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); } } From 56c387c656a043941f9acff610cdedc6519c1f38 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 19 Jun 2025 16:46:02 +0000 Subject: [PATCH 5/5] Eliminate duplicate GetType() calls by introducing runtimeType variable Co-authored-by: eiriktsarpalis <2813363+eiriktsarpalis@users.noreply.github.com> --- .../csharp/CustomConverterInferredTypesToObject.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs index e1b11f71f2036..b212411931328 100644 --- a/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs +++ b/docs/standard/serialization/system-text-json/snippets/how-to-contd/csharp/CustomConverterInferredTypesToObject.cs @@ -24,14 +24,15 @@ public override void Write( object objectToWrite, JsonSerializerOptions options) { - if (objectToWrite.GetType() == typeof(object)) + var runtimeType = objectToWrite.GetType(); + if (runtimeType == typeof(object)) { writer.WriteStartObject(); writer.WriteEndObject(); return; } - JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); + JsonSerializer.Serialize(writer, objectToWrite, runtimeType, options); } }