diff --git a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadSet.cs b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadSet.cs index ed78e7765c98..2d2606cc1b3f 100644 --- a/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadSet.cs +++ b/src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadSet.cs @@ -71,7 +71,12 @@ public static WorkloadSet FromDictionaryForJson(IDictionary dict public static WorkloadSet FromJson(string json, SdkFeatureBand defaultFeatureBand) { #if USE_SYSTEM_TEXT_JSON - return FromDictionaryForJson(JsonSerializer.Deserialize>(json)!, defaultFeatureBand); + var jsonSerializerOptions = new JsonSerializerOptions() + { + AllowTrailingCommas = true, + ReadCommentHandling = JsonCommentHandling.Skip + }; + return FromDictionaryForJson(JsonSerializer.Deserialize>(json, jsonSerializerOptions)!, defaultFeatureBand); #else return FromDictionaryForJson(JsonConvert.DeserializeObject>(json)!, defaultFeatureBand); #endif diff --git a/src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs b/src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs index 793892809dc1..b63147e7554b 100644 --- a/src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs +++ b/src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs @@ -202,6 +202,32 @@ var sdkDirectoryWorkloadManifestProvider .BeEquivalentTo("ios: 11.0.2/8.0.100", "android: 33.0.2-rc.1/8.0.200", "maui: 15.0.1-rc.456/8.0.200-rc.2"); } + + [Fact] + public void WorkloadSetCanHaveTrailingCommasInJson() + { + Initialize("8.0.200"); + + CreateMockManifest(_manifestRoot, "8.0.100", "ios", "11.0.2", true); + CreateMockManifest(_manifestRoot, "8.0.200", "android", "33.0.2-rc.1", true); + CreateMockManifest(_manifestRoot, "8.0.200-rc.2", "maui", "15.0.1-rc.456", true); + + CreateMockWorkloadSet(_manifestRoot, "8.0.200", "8.0.200", """ + { + "ios": "11.0.2/8.0.100", + "android": "33.0.2-rc.1/8.0.200", + "maui": "15.0.1-rc.456/8.0.200-rc.2", + } + """); + + var sdkDirectoryWorkloadManifestProvider + = new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: null); + + GetManifestContents(sdkDirectoryWorkloadManifestProvider) + .Should() + .BeEquivalentTo("ios: 11.0.2/8.0.100", "android: 33.0.2-rc.1/8.0.200", "maui: 15.0.1-rc.456/8.0.200-rc.2"); + } + [Theory] [InlineData(false)] [InlineData(true)]