Skip to content

Commit 2433fff

Browse files
committed
Allow trailing commas in workload set json
1 parent 0fb6201 commit 2433fff

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/WorkloadSet.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ public static WorkloadSet FromDictionaryForJson(IDictionary<string, string> dict
7171
public static WorkloadSet FromJson(string json, SdkFeatureBand defaultFeatureBand)
7272
{
7373
#if USE_SYSTEM_TEXT_JSON
74-
return FromDictionaryForJson(JsonSerializer.Deserialize<IDictionary<string, string>>(json)!, defaultFeatureBand);
74+
var jsonSerializerOptions = new JsonSerializerOptions()
75+
{
76+
AllowTrailingCommas = true,
77+
ReadCommentHandling = JsonCommentHandling.Skip
78+
};
79+
return FromDictionaryForJson(JsonSerializer.Deserialize<IDictionary<string, string>>(json, jsonSerializerOptions)!, defaultFeatureBand);
7580
#else
7681
return FromDictionaryForJson(JsonConvert.DeserializeObject<IDictionary<string, string>>(json)!, defaultFeatureBand);
7782
#endif

src/Tests/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,32 @@ var sdkDirectoryWorkloadManifestProvider
202202
.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");
203203
}
204204

205+
206+
[Fact]
207+
public void WorkloadSetCanHaveTrailingCommasInJson()
208+
{
209+
Initialize("8.0.200");
210+
211+
CreateMockManifest(_manifestRoot, "8.0.100", "ios", "11.0.2", true);
212+
CreateMockManifest(_manifestRoot, "8.0.200", "android", "33.0.2-rc.1", true);
213+
CreateMockManifest(_manifestRoot, "8.0.200-rc.2", "maui", "15.0.1-rc.456", true);
214+
215+
CreateMockWorkloadSet(_manifestRoot, "8.0.200", "8.0.200", """
216+
{
217+
"ios": "11.0.2/8.0.100",
218+
"android": "33.0.2-rc.1/8.0.200",
219+
"maui": "15.0.1-rc.456/8.0.200-rc.2",
220+
}
221+
""");
222+
223+
var sdkDirectoryWorkloadManifestProvider
224+
= new SdkDirectoryWorkloadManifestProvider(sdkRootPath: _fakeDotnetRootDirectory, sdkVersion: "8.0.200", userProfileDir: null, globalJsonPath: null);
225+
226+
GetManifestContents(sdkDirectoryWorkloadManifestProvider)
227+
.Should()
228+
.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");
229+
}
230+
205231
[Theory]
206232
[InlineData(false)]
207233
[InlineData(true)]

0 commit comments

Comments
 (0)