Description
Reading through https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/supported-collection-types JsonSerializer.Deserialize will support deserialization to a ton of different collection interfaces.
Strangely, IReadOnlySet is not mentioned at all in the page I linked. Not even to say it's not supported, as some collection types have e.g. LinkedListNode<T>.
When trying to deserialize to an IReadOnlySet, JsonSerializer throws a NotSupportedException
Reproduction Steps
- Run
dotnet new console
- Write
Program.cs
using System.Collections.Immutable;
using System.Text.Json;
// Both of these work as expected
var setResult = JsonSerializer.Deserialize<ISet<int>>("[1]");
var immutableSetResult = JsonSerializer.Deserialize<IImmutableSet<int>>("[1]");
// throws NotSupportedException
JsonSerializer.Deserialize<IReadOnlySet<int>>("[1]");
Expected behavior
JsonSerializer.Deserialize<IReadOnlySet<int>>("[1]"); ought to work, like it does for ISet or other readonly collections e.g. IReadOnlyList.
I would also expect IReadOnlySet to be featured in this page https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/supported-collection-types one way or another.
Actual behavior
JsonSerializer.Deserialize<IReadOnlySet<int>>("[1]"); throws NotSupportedException and completely absent from https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/supported-collection-types
Regression?
Don't know.
Known Workarounds
Use ISet or similar.
Configuration
> dotnet sdk check
Version Status
------------------------
7.0.400 Up to date.
Microsoft.NETCore.App 7.0.10 Up to date.
Microsoft.WindowsDesktop.App 7.0.10 Up to date.
Windows 11 Pro x64
> [System.Environment]::OSVersion
Platform ServicePack Version VersionString
-------- ----------- ------- -------------
Win32NT 10.0.22623.0 Microsoft Windows NT 10.0.22623.0
Other information
No response
Description
Reading through https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/supported-collection-types
JsonSerializer.Deserializewill support deserialization to a ton of different collection interfaces.Strangely,
IReadOnlySetis not mentioned at all in the page I linked. Not even to say it's not supported, as some collection types have e.g.LinkedListNode<T>.When trying to deserialize to an
IReadOnlySet,JsonSerializerthrows aNotSupportedExceptionReproduction Steps
dotnet new consoleProgram.csExpected behavior
JsonSerializer.Deserialize<IReadOnlySet<int>>("[1]");ought to work, like it does forISetor other readonly collections e.g.IReadOnlyList.I would also expect
IReadOnlySetto be featured in this page https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/supported-collection-types one way or another.Actual behavior
JsonSerializer.Deserialize<IReadOnlySet<int>>("[1]");throwsNotSupportedExceptionand completely absent from https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/supported-collection-typesRegression?
Don't know.
Known Workarounds
Use
ISetor similar.Configuration
Windows 11 Pro x64
Other information
No response