Fix C# 14 breaking change - add explicit string casts for JsonSerializer.Deserialize calls #629
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.




Overview
This PR addresses a breaking change in C# 14 (.NET 10) related to
JsonSerializer.Deserializemethod overload resolution. Starting with .NET 10, new overloads acceptingReadOnlySpan<byte>are available, which can cause ambiguity errors when the compiler cannot determine which overload to use.Problem
As documented in the C# 14 compiler breaking changes, code that passes parameters of ambiguous types (like
object,var, or nullable types) toJsonSerializer.Deserializewill fail to compile with errors such as:Solution
Added explicit
(string)casts to allJsonSerializer.Deserializecalls where parameters could potentially be ambiguous:Modified Files
JsonBodyModelBinder.cs
jsonPayloadparameter to ensure string overload is selectedSettingService.cs
setting.Metadataproperty in both generic (Deserialize<T>) and non-generic callsPowerExcelMapper.cs
cell.StringCellValuewhen deserializing JSON data from Excel cellsSessionExtensions.cs
valuefromGetString()which returnsstring?(nullable string)Testing
JsonSerializer.Deserializecalls verified as safeCompatibility
These changes are purely defensive and maintain full backward compatibility with .NET 8 and .NET 9. The explicit casts clarify intent and prepare the codebase for .NET 10 without affecting current functionality.
Related
Fixes #[issue_number] (if applicable)
Thanks to @CancanTang for the early heads-up on this breaking change during .NET 10 smoke testing!
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
ccsca2021.crl.certum.pldotnet build GrandNode.sln --no-incremental(dns block)ccsca2021.ocsp-certum.comdotnet build GrandNode.sln --no-incremental(dns block)crl.certum.pldotnet build GrandNode.sln --no-incremental(dns block)subca.ocsp-certum.comdotnet build GrandNode.sln --no-incremental(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
Fixes #626
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.