diff --git a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.json b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.json
index 08e7c6c92..14e8fb356 100644
--- a/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.json
+++ b/performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.json
@@ -1 +1,1182 @@
-{"Title":"performance.Descriptions-20250514-154213","HostEnvironmentInfo":{"BenchmarkDotNetCaption":"BenchmarkDotNet","BenchmarkDotNetVersion":"0.14.0","OsVersion":"Windows 11 (10.0.26100.3981)","ProcessorName":"11th Gen Intel Core i7-1185G7 3.00GHz","PhysicalProcessorCount":1,"PhysicalCoreCount":4,"LogicalCoreCount":8,"RuntimeVersion":".NET 8.0.16 (8.0.1625.21506)","Architecture":"X64","HasAttachedDebugger":false,"HasRyuJit":true,"Configuration":"RELEASE","DotNetCliVersion":"8.0.409","ChronometerFrequency":{"Hertz":10000000},"HardwareTimerKind":"Unknown"},"Benchmarks":[{"DisplayInfo":"Descriptions.PetStoreYaml: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)","Namespace":"performance","Type":"Descriptions","Method":"PetStoreYaml","MethodTitle":"PetStoreYaml","Parameters":"","FullName":"performance.Descriptions.PetStoreYaml","HardwareIntrinsics":"AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256","Statistics":{"OriginalValues":[465362.5,466458.984375,478982.8125],"N":3,"Min":465362.5,"LowerFence":455695.5078125,"Q1":465910.7421875,"Median":466458.984375,"Mean":470268.0989583333,"Q3":472720.8984375,"UpperFence":482936.1328125,"Max":478982.8125,"InterquartileRange":6810.15625,"LowerOutliers":[],"UpperOutliers":[],"AllOutliers":[],"StandardError":4368.838273543516,"Variance":57260243.58113606,"StandardDeviation":7567.049859828866,"Skewness":0.37582823758451755,"Kurtosis":0.6666666666666706,"ConfidenceInterval":{"N":3,"Mean":470268.0989583333,"StandardError":4368.838273543516,"Level":12,"Margin":138051.1584827056,"Lower":332216.9404756277,"Upper":608319.257441039},"Percentiles":{"P0":465362.5,"P25":465910.7421875,"P50":466458.984375,"P67":470717.0859375,"P80":473973.28125,"P85":475225.6640625,"P90":476478.046875,"P95":477730.4296875,"P100":478982.8125}},"Memory":{"Gen0Collections":15,"Gen1Collections":3,"Gen2Collections":0,"TotalOperations":256,"BytesAllocatedPerOperation":389660},"Measurements":[{"IterationMode":"Overhead","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":210500},{"IterationMode":"Workload","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":82571800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":1,"Operations":2,"Nanoseconds":3872500},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":2,"Operations":3,"Nanoseconds":6115500},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":3,"Operations":4,"Nanoseconds":7331400},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":4,"Operations":5,"Nanoseconds":9186500},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":5,"Operations":6,"Nanoseconds":12504800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":6,"Operations":7,"Nanoseconds":14797700},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":7,"Operations":8,"Nanoseconds":14768200},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":8,"Operations":9,"Nanoseconds":18440400},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":9,"Operations":10,"Nanoseconds":21516300},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":10,"Operations":11,"Nanoseconds":20485000},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":11,"Operations":12,"Nanoseconds":25991800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":12,"Operations":13,"Nanoseconds":24538900},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":13,"Operations":14,"Nanoseconds":30255300},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":14,"Operations":15,"Nanoseconds":27933500},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":15,"Operations":16,"Nanoseconds":31059700},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":16,"Operations":32,"Nanoseconds":63905200},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":17,"Operations":64,"Nanoseconds":111009300},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":18,"Operations":128,"Nanoseconds":268925200},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":19,"Operations":256,"Nanoseconds":716804800},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":1,"Operations":256,"Nanoseconds":220782800},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":2,"Operations":256,"Nanoseconds":174724700},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":3,"Operations":256,"Nanoseconds":127336100},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":1,"Operations":256,"Nanoseconds":119132800},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":2,"Operations":256,"Nanoseconds":119413500},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":3,"Operations":256,"Nanoseconds":122619600},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":1,"Operations":256,"Nanoseconds":119132800},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":2,"Operations":256,"Nanoseconds":119413500},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":3,"Operations":256,"Nanoseconds":122619600}],"Metrics":[{"Value":58.59375,"Descriptor":{"Id":"Gen0Collects","DisplayName":"Gen0","Legend":"GC Generation 0 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":0}},{"Value":11.71875,"Descriptor":{"Id":"Gen1Collects","DisplayName":"Gen1","Legend":"GC Generation 1 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":1}},{"Value":0,"Descriptor":{"Id":"Gen2Collects","DisplayName":"Gen2","Legend":"GC Generation 2 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":2}},{"Value":389660,"Descriptor":{"Id":"Allocated Memory","DisplayName":"Allocated","Legend":"Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)","NumberFormat":"0.##","UnitType":2,"Unit":"B","TheGreaterTheBetter":false,"PriorityInCategory":3}}]},{"DisplayInfo":"Descriptions.PetStoreJson: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)","Namespace":"performance","Type":"Descriptions","Method":"PetStoreJson","MethodTitle":"PetStoreJson","Parameters":"","FullName":"performance.Descriptions.PetStoreJson","HardwareIntrinsics":"AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256","Statistics":{"OriginalValues":[164686.81640625,164494.04296875,168749.0234375],"N":3,"Min":164494.04296875,"LowerFence":161399.1943359375,"Q1":164590.4296875,"Median":164686.81640625,"Mean":165976.62760416666,"Q3":166717.919921875,"UpperFence":169909.1552734375,"Max":168749.0234375,"InterquartileRange":2127.490234375,"LowerOutliers":[],"UpperOutliers":[],"AllOutliers":[],"StandardError":1387.3144791363893,"Variance":5773924.392064413,"StandardDeviation":2402.8991639401793,"Skewness":0.38211513228079363,"Kurtosis":0.6666666666666727,"ConfidenceInterval":{"N":3,"Mean":165976.62760416666,"StandardError":1387.3144791363893,"Level":12,"Margin":43837.82576352267,"Lower":122138.80184064398,"Upper":209814.45336768933},"Percentiles":{"P0":164494.04296875,"P25":164590.4296875,"P50":164686.81640625,"P67":166067.966796875,"P80":167124.140625,"P85":167530.361328125,"P90":167936.58203125,"P95":168342.802734375,"P100":168749.0234375}},"Memory":{"Gen0Collections":40,"Gen1Collections":9,"Gen2Collections":0,"TotalOperations":1024,"BytesAllocatedPerOperation":248489},"Measurements":[{"IterationMode":"Overhead","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":229900},{"IterationMode":"Workload","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":49778600},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":1,"Operations":2,"Nanoseconds":1747400},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":2,"Operations":3,"Nanoseconds":1888900},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":3,"Operations":4,"Nanoseconds":2252800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":4,"Operations":5,"Nanoseconds":3001800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":5,"Operations":6,"Nanoseconds":4090800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":6,"Operations":7,"Nanoseconds":4234800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":7,"Operations":8,"Nanoseconds":5649900},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":8,"Operations":9,"Nanoseconds":5566900},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":9,"Operations":10,"Nanoseconds":7057700},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":10,"Operations":11,"Nanoseconds":7532000},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":11,"Operations":12,"Nanoseconds":8156400},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":12,"Operations":13,"Nanoseconds":7620800},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":13,"Operations":14,"Nanoseconds":8519200},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":14,"Operations":15,"Nanoseconds":10029200},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":15,"Operations":16,"Nanoseconds":10782300},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":16,"Operations":32,"Nanoseconds":19995000},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":17,"Operations":64,"Nanoseconds":40188000},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":18,"Operations":128,"Nanoseconds":74045000},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":19,"Operations":256,"Nanoseconds":146500400},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":20,"Operations":512,"Nanoseconds":305057600},{"IterationMode":"Workload","IterationStage":"Pilot","LaunchIndex":1,"IterationIndex":21,"Operations":1024,"Nanoseconds":590308900},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":1,"Operations":1024,"Nanoseconds":476135100},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":2,"Operations":1024,"Nanoseconds":190273500},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":3,"Operations":1024,"Nanoseconds":170380100},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":1,"Operations":1024,"Nanoseconds":168639300},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":2,"Operations":1024,"Nanoseconds":168441900},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":3,"Operations":1024,"Nanoseconds":172799000},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":1,"Operations":1024,"Nanoseconds":168639300},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":2,"Operations":1024,"Nanoseconds":168441900},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":3,"Operations":1024,"Nanoseconds":172799000}],"Metrics":[{"Value":39.0625,"Descriptor":{"Id":"Gen0Collects","DisplayName":"Gen0","Legend":"GC Generation 0 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":0}},{"Value":8.7890625,"Descriptor":{"Id":"Gen1Collects","DisplayName":"Gen1","Legend":"GC Generation 1 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":1}},{"Value":0,"Descriptor":{"Id":"Gen2Collects","DisplayName":"Gen2","Legend":"GC Generation 2 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":2}},{"Value":248489,"Descriptor":{"Id":"Allocated Memory","DisplayName":"Allocated","Legend":"Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)","NumberFormat":"0.##","UnitType":2,"Unit":"B","TheGreaterTheBetter":false,"PriorityInCategory":3}}]},{"DisplayInfo":"Descriptions.GHESYaml: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)","Namespace":"performance","Type":"Descriptions","Method":"GHESYaml","MethodTitle":"GHESYaml","Parameters":"","FullName":"performance.Descriptions.GHESYaml","HardwareIntrinsics":"AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256","Statistics":{"OriginalValues":[945590600,929477300,871151200],"N":3,"Min":871151200,"LowerFence":844484700,"Q1":900314250,"Median":929477300,"Mean":915406366.6666666,"Q3":937533950,"UpperFence":993363500,"Max":945590600,"InterquartileRange":37219700,"LowerOutliers":[],"UpperOutliers":[],"AllOutliers":[],"StandardError":22611202.546107784,"Variance":1533799441743333.5,"StandardDeviation":39163751.63008944,"Skewness":-0.3129062028807021,"Kurtosis":0.6666666666666653,"ConfidenceInterval":{"N":3,"Mean":915406366.6666666,"StandardError":22611202.546107784,"Level":12,"Margin":714492620.4021431,"Lower":200913746.2645235,"Upper":1629898987.0688097},"Percentiles":{"P0":871151200,"P25":900314250,"P50":929477300,"P67":934955822,"P80":939145280,"P85":940756610,"P90":942367940,"P95":943979270,"P100":945590600}},"Memory":{"Gen0Collections":68,"Gen1Collections":22,"Gen2Collections":4,"TotalOperations":1,"BytesAllocatedPerOperation":405300208},"Measurements":[{"IterationMode":"Overhead","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":238300},{"IterationMode":"Workload","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":1805606300},{"IterationMode":"Overhead","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":600},{"IterationMode":"Workload","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":1068747500},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":998100500},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":922151200},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":3,"Operations":1,"Nanoseconds":915421700},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":945590600},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":929477300},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":3,"Operations":1,"Nanoseconds":871151200},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":945590600},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":929477300},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":3,"Operations":1,"Nanoseconds":871151200}],"Metrics":[{"Value":68000,"Descriptor":{"Id":"Gen0Collects","DisplayName":"Gen0","Legend":"GC Generation 0 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":0}},{"Value":22000,"Descriptor":{"Id":"Gen1Collects","DisplayName":"Gen1","Legend":"GC Generation 1 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":1}},{"Value":4000,"Descriptor":{"Id":"Gen2Collects","DisplayName":"Gen2","Legend":"GC Generation 2 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":2}},{"Value":405300208,"Descriptor":{"Id":"Allocated Memory","DisplayName":"Allocated","Legend":"Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)","NumberFormat":"0.##","UnitType":2,"Unit":"B","TheGreaterTheBetter":false,"PriorityInCategory":3}}]},{"DisplayInfo":"Descriptions.GHESJson: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)","Namespace":"performance","Type":"Descriptions","Method":"GHESJson","MethodTitle":"GHESJson","Parameters":"","FullName":"performance.Descriptions.GHESJson","HardwareIntrinsics":"AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256","Statistics":{"OriginalValues":[486026300,468580000,457221900],"N":3,"Min":457221900,"LowerFence":441297650,"Q1":462900950,"Median":468580000,"Mean":470609400,"Q3":477303150,"UpperFence":498906450,"Max":486026300,"InterquartileRange":14402200,"LowerOutliers":[],"UpperOutliers":[],"AllOutliers":[],"StandardError":8376797.580420177,"Variance":210512213110000,"StandardDeviation":14509039.014007784,"Skewness":0.13713498071671384,"Kurtosis":0.6666666666666666,"ConfidenceInterval":{"N":3,"Mean":470609400,"StandardError":8376797.580420177,"Level":12,"Margin":264698882.84836096,"Lower":205910517.15163904,"Upper":735308282.848361},"Percentiles":{"P0":457221900,"P25":462900950,"P50":468580000,"P67":474511742,"P80":479047780,"P85":480792410,"P90":482537040,"P95":484281670,"P100":486026300}},"Memory":{"Gen0Collections":42,"Gen1Collections":15,"Gen2Collections":3,"TotalOperations":1,"BytesAllocatedPerOperation":263444936},"Measurements":[{"IterationMode":"Overhead","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":609500},{"IterationMode":"Workload","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":1017050000},{"IterationMode":"Overhead","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":600},{"IterationMode":"Workload","IterationStage":"Jitting","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":836928600},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":626599200},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":501412100},{"IterationMode":"Workload","IterationStage":"Warmup","LaunchIndex":1,"IterationIndex":3,"Operations":1,"Nanoseconds":495906300},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":486026300},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":468580000},{"IterationMode":"Workload","IterationStage":"Actual","LaunchIndex":1,"IterationIndex":3,"Operations":1,"Nanoseconds":457221900},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":1,"Operations":1,"Nanoseconds":486026300},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":2,"Operations":1,"Nanoseconds":468580000},{"IterationMode":"Workload","IterationStage":"Result","LaunchIndex":1,"IterationIndex":3,"Operations":1,"Nanoseconds":457221900}],"Metrics":[{"Value":42000,"Descriptor":{"Id":"Gen0Collects","DisplayName":"Gen0","Legend":"GC Generation 0 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":0}},{"Value":15000,"Descriptor":{"Id":"Gen1Collects","DisplayName":"Gen1","Legend":"GC Generation 1 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":1}},{"Value":3000,"Descriptor":{"Id":"Gen2Collects","DisplayName":"Gen2","Legend":"GC Generation 2 collects per 1000 operations","NumberFormat":"#0.0000","UnitType":0,"Unit":"Count","TheGreaterTheBetter":false,"PriorityInCategory":2}},{"Value":263444936,"Descriptor":{"Id":"Allocated Memory","DisplayName":"Allocated","Legend":"Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)","NumberFormat":"0.##","UnitType":2,"Unit":"B","TheGreaterTheBetter":false,"PriorityInCategory":3}}]}]}
+{
+ "Title": "performance.Descriptions-20250514-154213",
+ "HostEnvironmentInfo": {
+ "BenchmarkDotNetCaption": "BenchmarkDotNet",
+ "BenchmarkDotNetVersion": "0.14.0",
+ "OsVersion": "Windows 11 (10.0.26100.3981)",
+ "ProcessorName": "11th Gen Intel Core i7-1185G7 3.00GHz",
+ "PhysicalProcessorCount": 1,
+ "PhysicalCoreCount": 4,
+ "LogicalCoreCount": 8,
+ "RuntimeVersion": ".NET 8.0.16 (8.0.1625.21506)",
+ "Architecture": "X64",
+ "HasAttachedDebugger": false,
+ "HasRyuJit": true,
+ "Configuration": "RELEASE",
+ "DotNetCliVersion": "8.0.409",
+ "ChronometerFrequency": { "Hertz": 10000000 },
+ "HardwareTimerKind": "Unknown"
+ },
+ "Benchmarks": [
+ {
+ "DisplayInfo": "Descriptions.PetStoreYaml: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)",
+ "Namespace": "performance",
+ "Type": "Descriptions",
+ "Method": "PetStoreYaml",
+ "MethodTitle": "PetStoreYaml",
+ "Parameters": "",
+ "FullName": "performance.Descriptions.PetStoreYaml",
+ "HardwareIntrinsics": "AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256",
+ "Statistics": {
+ "OriginalValues": [ 465362.5, 466458.984375, 478982.8125 ],
+ "N": 3,
+ "Min": 465362.5,
+ "LowerFence": 455695.5078125,
+ "Q1": 465910.7421875,
+ "Median": 466458.984375,
+ "Mean": 470268.0989583333,
+ "Q3": 472720.8984375,
+ "UpperFence": 482936.1328125,
+ "Max": 478982.8125,
+ "InterquartileRange": 6810.15625,
+ "LowerOutliers": [],
+ "UpperOutliers": [],
+ "AllOutliers": [],
+ "StandardError": 4368.838273543516,
+ "Variance": 57260243.58113606,
+ "StandardDeviation": 7567.049859828866,
+ "Skewness": 0.37582823758451755,
+ "Kurtosis": 0.6666666666666706,
+ "ConfidenceInterval": {
+ "N": 3,
+ "Mean": 470268.0989583333,
+ "StandardError": 4368.838273543516,
+ "Level": 12,
+ "Margin": 138051.1584827056,
+ "Lower": 332216.9404756277,
+ "Upper": 608319.257441039
+ },
+ "Percentiles": {
+ "P0": 465362.5,
+ "P25": 465910.7421875,
+ "P50": 466458.984375,
+ "P67": 470717.0859375,
+ "P80": 473973.28125,
+ "P85": 475225.6640625,
+ "P90": 476478.046875,
+ "P95": 477730.4296875,
+ "P100": 478982.8125
+ }
+ },
+ "Memory": {
+ "Gen0Collections": 15,
+ "Gen1Collections": 3,
+ "Gen2Collections": 0,
+ "TotalOperations": 256,
+ "BytesAllocatedPerOperation": 396052
+ },
+ "Measurements": [
+ {
+ "IterationMode": "Overhead",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 210500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 82571800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 2,
+ "Nanoseconds": 3872500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 3,
+ "Nanoseconds": 6115500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 4,
+ "Nanoseconds": 7331400
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 4,
+ "Operations": 5,
+ "Nanoseconds": 9186500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 5,
+ "Operations": 6,
+ "Nanoseconds": 12504800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 6,
+ "Operations": 7,
+ "Nanoseconds": 14797700
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 7,
+ "Operations": 8,
+ "Nanoseconds": 14768200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 8,
+ "Operations": 9,
+ "Nanoseconds": 18440400
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 9,
+ "Operations": 10,
+ "Nanoseconds": 21516300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 10,
+ "Operations": 11,
+ "Nanoseconds": 20485000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 11,
+ "Operations": 12,
+ "Nanoseconds": 25991800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 12,
+ "Operations": 13,
+ "Nanoseconds": 24538900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 13,
+ "Operations": 14,
+ "Nanoseconds": 30255300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 14,
+ "Operations": 15,
+ "Nanoseconds": 27933500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 15,
+ "Operations": 16,
+ "Nanoseconds": 31059700
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 16,
+ "Operations": 32,
+ "Nanoseconds": 63905200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 17,
+ "Operations": 64,
+ "Nanoseconds": 111009300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 18,
+ "Operations": 128,
+ "Nanoseconds": 268925200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 19,
+ "Operations": 256,
+ "Nanoseconds": 716804800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 256,
+ "Nanoseconds": 220782800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 256,
+ "Nanoseconds": 174724700
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 256,
+ "Nanoseconds": 127336100
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 256,
+ "Nanoseconds": 119132800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 256,
+ "Nanoseconds": 119413500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 256,
+ "Nanoseconds": 122619600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 256,
+ "Nanoseconds": 119132800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 256,
+ "Nanoseconds": 119413500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 256,
+ "Nanoseconds": 122619600
+ }
+ ],
+ "Metrics": [
+ {
+ "Value": 58.59375,
+ "Descriptor": {
+ "Id": "Gen0Collects",
+ "DisplayName": "Gen0",
+ "Legend": "GC Generation 0 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 0
+ }
+ },
+ {
+ "Value": 11.71875,
+ "Descriptor": {
+ "Id": "Gen1Collects",
+ "DisplayName": "Gen1",
+ "Legend": "GC Generation 1 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 1
+ }
+ },
+ {
+ "Value": 0,
+ "Descriptor": {
+ "Id": "Gen2Collects",
+ "DisplayName": "Gen2",
+ "Legend": "GC Generation 2 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 2
+ }
+ },
+ {
+ "Value": 396052,
+ "Descriptor": {
+ "Id": "Allocated Memory",
+ "DisplayName": "Allocated",
+ "Legend": "Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)",
+ "NumberFormat": "0.##",
+ "UnitType": 2,
+ "Unit": "B",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 3
+ }
+ }
+ ]
+ },
+ {
+ "DisplayInfo": "Descriptions.PetStoreJson: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)",
+ "Namespace": "performance",
+ "Type": "Descriptions",
+ "Method": "PetStoreJson",
+ "MethodTitle": "PetStoreJson",
+ "Parameters": "",
+ "FullName": "performance.Descriptions.PetStoreJson",
+ "HardwareIntrinsics": "AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256",
+ "Statistics": {
+ "OriginalValues": [ 164686.81640625, 164494.04296875, 168749.0234375 ],
+ "N": 3,
+ "Min": 164494.04296875,
+ "LowerFence": 161399.1943359375,
+ "Q1": 164590.4296875,
+ "Median": 164686.81640625,
+ "Mean": 165976.62760416666,
+ "Q3": 166717.919921875,
+ "UpperFence": 169909.1552734375,
+ "Max": 168749.0234375,
+ "InterquartileRange": 2127.490234375,
+ "LowerOutliers": [],
+ "UpperOutliers": [],
+ "AllOutliers": [],
+ "StandardError": 1387.3144791363893,
+ "Variance": 5773924.392064413,
+ "StandardDeviation": 2402.8991639401793,
+ "Skewness": 0.38211513228079363,
+ "Kurtosis": 0.6666666666666727,
+ "ConfidenceInterval": {
+ "N": 3,
+ "Mean": 165976.62760416666,
+ "StandardError": 1387.3144791363893,
+ "Level": 12,
+ "Margin": 43837.82576352267,
+ "Lower": 122138.80184064398,
+ "Upper": 209814.45336768933
+ },
+ "Percentiles": {
+ "P0": 164494.04296875,
+ "P25": 164590.4296875,
+ "P50": 164686.81640625,
+ "P67": 166067.966796875,
+ "P80": 167124.140625,
+ "P85": 167530.361328125,
+ "P90": 167936.58203125,
+ "P95": 168342.802734375,
+ "P100": 168749.0234375
+ }
+ },
+ "Memory": {
+ "Gen0Collections": 40,
+ "Gen1Collections": 9,
+ "Gen2Collections": 0,
+ "TotalOperations": 1024,
+ "BytesAllocatedPerOperation": 254585
+ },
+ "Measurements": [
+ {
+ "IterationMode": "Overhead",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 229900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 49778600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 2,
+ "Nanoseconds": 1747400
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 3,
+ "Nanoseconds": 1888900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 4,
+ "Nanoseconds": 2252800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 4,
+ "Operations": 5,
+ "Nanoseconds": 3001800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 5,
+ "Operations": 6,
+ "Nanoseconds": 4090800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 6,
+ "Operations": 7,
+ "Nanoseconds": 4234800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 7,
+ "Operations": 8,
+ "Nanoseconds": 5649900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 8,
+ "Operations": 9,
+ "Nanoseconds": 5566900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 9,
+ "Operations": 10,
+ "Nanoseconds": 7057700
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 10,
+ "Operations": 11,
+ "Nanoseconds": 7532000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 11,
+ "Operations": 12,
+ "Nanoseconds": 8156400
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 12,
+ "Operations": 13,
+ "Nanoseconds": 7620800
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 13,
+ "Operations": 14,
+ "Nanoseconds": 8519200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 14,
+ "Operations": 15,
+ "Nanoseconds": 10029200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 15,
+ "Operations": 16,
+ "Nanoseconds": 10782300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 16,
+ "Operations": 32,
+ "Nanoseconds": 19995000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 17,
+ "Operations": 64,
+ "Nanoseconds": 40188000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 18,
+ "Operations": 128,
+ "Nanoseconds": 74045000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 19,
+ "Operations": 256,
+ "Nanoseconds": 146500400
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 20,
+ "Operations": 512,
+ "Nanoseconds": 305057600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Pilot",
+ "LaunchIndex": 1,
+ "IterationIndex": 21,
+ "Operations": 1024,
+ "Nanoseconds": 590308900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1024,
+ "Nanoseconds": 476135100
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1024,
+ "Nanoseconds": 190273500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1024,
+ "Nanoseconds": 170380100
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1024,
+ "Nanoseconds": 168639300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1024,
+ "Nanoseconds": 168441900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1024,
+ "Nanoseconds": 172799000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1024,
+ "Nanoseconds": 168639300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1024,
+ "Nanoseconds": 168441900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1024,
+ "Nanoseconds": 172799000
+ }
+ ],
+ "Metrics": [
+ {
+ "Value": 39.0625,
+ "Descriptor": {
+ "Id": "Gen0Collects",
+ "DisplayName": "Gen0",
+ "Legend": "GC Generation 0 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 0
+ }
+ },
+ {
+ "Value": 8.7890625,
+ "Descriptor": {
+ "Id": "Gen1Collects",
+ "DisplayName": "Gen1",
+ "Legend": "GC Generation 1 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 1
+ }
+ },
+ {
+ "Value": 0,
+ "Descriptor": {
+ "Id": "Gen2Collects",
+ "DisplayName": "Gen2",
+ "Legend": "GC Generation 2 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 2
+ }
+ },
+ {
+ "Value": 254585,
+ "Descriptor": {
+ "Id": "Allocated Memory",
+ "DisplayName": "Allocated",
+ "Legend": "Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)",
+ "NumberFormat": "0.##",
+ "UnitType": 2,
+ "Unit": "B",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 3
+ }
+ }
+ ]
+ },
+ {
+ "DisplayInfo": "Descriptions.GHESYaml: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)",
+ "Namespace": "performance",
+ "Type": "Descriptions",
+ "Method": "GHESYaml",
+ "MethodTitle": "GHESYaml",
+ "Parameters": "",
+ "FullName": "performance.Descriptions.GHESYaml",
+ "HardwareIntrinsics": "AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256",
+ "Statistics": {
+ "OriginalValues": [ 945590600, 929477300, 871151200 ],
+ "N": 3,
+ "Min": 871151200,
+ "LowerFence": 844484700,
+ "Q1": 900314250,
+ "Median": 929477300,
+ "Mean": 915406366.6666666,
+ "Q3": 937533950,
+ "UpperFence": 993363500,
+ "Max": 945590600,
+ "InterquartileRange": 37219700,
+ "LowerOutliers": [],
+ "UpperOutliers": [],
+ "AllOutliers": [],
+ "StandardError": 22611202.546107784,
+ "Variance": 1533799441743333.5,
+ "StandardDeviation": 39163751.63008944,
+ "Skewness": -0.3129062028807021,
+ "Kurtosis": 0.6666666666666653,
+ "ConfidenceInterval": {
+ "N": 3,
+ "Mean": 915406366.6666666,
+ "StandardError": 22611202.546107784,
+ "Level": 12,
+ "Margin": 714492620.4021431,
+ "Lower": 200913746.2645235,
+ "Upper": 1629898987.0688097
+ },
+ "Percentiles": {
+ "P0": 871151200,
+ "P25": 900314250,
+ "P50": 929477300,
+ "P67": 934955822,
+ "P80": 939145280,
+ "P85": 940756610,
+ "P90": 942367940,
+ "P95": 943979270,
+ "P100": 945590600
+ }
+ },
+ "Memory": {
+ "Gen0Collections": 68,
+ "Gen1Collections": 22,
+ "Gen2Collections": 4,
+ "TotalOperations": 1,
+ "BytesAllocatedPerOperation": 409271848
+ },
+ "Measurements": [
+ {
+ "IterationMode": "Overhead",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 238300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 1805606300
+ },
+ {
+ "IterationMode": "Overhead",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 1068747500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 998100500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 922151200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1,
+ "Nanoseconds": 915421700
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 945590600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 929477300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1,
+ "Nanoseconds": 871151200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 945590600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 929477300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1,
+ "Nanoseconds": 871151200
+ }
+ ],
+ "Metrics": [
+ {
+ "Value": 68000,
+ "Descriptor": {
+ "Id": "Gen0Collects",
+ "DisplayName": "Gen0",
+ "Legend": "GC Generation 0 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 0
+ }
+ },
+ {
+ "Value": 22000,
+ "Descriptor": {
+ "Id": "Gen1Collects",
+ "DisplayName": "Gen1",
+ "Legend": "GC Generation 1 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 1
+ }
+ },
+ {
+ "Value": 4000,
+ "Descriptor": {
+ "Id": "Gen2Collects",
+ "DisplayName": "Gen2",
+ "Legend": "GC Generation 2 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 2
+ }
+ },
+ {
+ "Value": 409271848,
+ "Descriptor": {
+ "Id": "Allocated Memory",
+ "DisplayName": "Allocated",
+ "Legend": "Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)",
+ "NumberFormat": "0.##",
+ "UnitType": 2,
+ "Unit": "B",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 3
+ }
+ }
+ ]
+ },
+ {
+ "DisplayInfo": "Descriptions.GHESJson: ShortRun(IterationCount=3, LaunchCount=1, WarmupCount=3)",
+ "Namespace": "performance",
+ "Type": "Descriptions",
+ "Method": "GHESJson",
+ "MethodTitle": "GHESJson",
+ "Parameters": "",
+ "FullName": "performance.Descriptions.GHESJson",
+ "HardwareIntrinsics": "AVX-512F+CD+BW+DQ+VL+VBMI,AES,BMI1,BMI2,FMA,LZCNT,PCLMUL,POPCNT VectorSize=256",
+ "Statistics": {
+ "OriginalValues": [ 486026300, 468580000, 457221900 ],
+ "N": 3,
+ "Min": 457221900,
+ "LowerFence": 441297650,
+ "Q1": 462900950,
+ "Median": 468580000,
+ "Mean": 470609400,
+ "Q3": 477303150,
+ "UpperFence": 498906450,
+ "Max": 486026300,
+ "InterquartileRange": 14402200,
+ "LowerOutliers": [],
+ "UpperOutliers": [],
+ "AllOutliers": [],
+ "StandardError": 8376797.580420177,
+ "Variance": 210512213110000,
+ "StandardDeviation": 14509039.014007784,
+ "Skewness": 0.13713498071671384,
+ "Kurtosis": 0.6666666666666666,
+ "ConfidenceInterval": {
+ "N": 3,
+ "Mean": 470609400,
+ "StandardError": 8376797.580420177,
+ "Level": 12,
+ "Margin": 264698882.84836096,
+ "Lower": 205910517.15163904,
+ "Upper": 735308282.848361
+ },
+ "Percentiles": {
+ "P0": 457221900,
+ "P25": 462900950,
+ "P50": 468580000,
+ "P67": 474511742,
+ "P80": 479047780,
+ "P85": 480792410,
+ "P90": 482537040,
+ "P95": 484281670,
+ "P100": 486026300
+ }
+ },
+ "Memory": {
+ "Gen0Collections": 42,
+ "Gen1Collections": 15,
+ "Gen2Collections": 3,
+ "TotalOperations": 1,
+ "BytesAllocatedPerOperation": 267416792
+ },
+ "Measurements": [
+ {
+ "IterationMode": "Overhead",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 609500
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 1017050000
+ },
+ {
+ "IterationMode": "Overhead",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Jitting",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 836928600
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 626599200
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 501412100
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Warmup",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1,
+ "Nanoseconds": 495906300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 486026300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 468580000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Actual",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1,
+ "Nanoseconds": 457221900
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 1,
+ "Operations": 1,
+ "Nanoseconds": 486026300
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 2,
+ "Operations": 1,
+ "Nanoseconds": 468580000
+ },
+ {
+ "IterationMode": "Workload",
+ "IterationStage": "Result",
+ "LaunchIndex": 1,
+ "IterationIndex": 3,
+ "Operations": 1,
+ "Nanoseconds": 457221900
+ }
+ ],
+ "Metrics": [
+ {
+ "Value": 42000,
+ "Descriptor": {
+ "Id": "Gen0Collects",
+ "DisplayName": "Gen0",
+ "Legend": "GC Generation 0 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 0
+ }
+ },
+ {
+ "Value": 15000,
+ "Descriptor": {
+ "Id": "Gen1Collects",
+ "DisplayName": "Gen1",
+ "Legend": "GC Generation 1 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 1
+ }
+ },
+ {
+ "Value": 3000,
+ "Descriptor": {
+ "Id": "Gen2Collects",
+ "DisplayName": "Gen2",
+ "Legend": "GC Generation 2 collects per 1000 operations",
+ "NumberFormat": "#0.0000",
+ "UnitType": 0,
+ "Unit": "Count",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 2
+ }
+ },
+ {
+ "Value": 267416792,
+ "Descriptor": {
+ "Id": "Allocated Memory",
+ "DisplayName": "Allocated",
+ "Legend": "Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)",
+ "NumberFormat": "0.##",
+ "UnitType": 2,
+ "Unit": "B",
+ "TheGreaterTheBetter": false,
+ "PriorityInCategory": 3
+ }
+ }
+ ]
+ }
+ ]
+}
diff --git a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs
index 0801d1d49..1a98fd556 100644
--- a/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs
+++ b/src/Microsoft.OpenApi.Hidi/Extensions/OpenApiExtensibleExtensions.cs
@@ -11,7 +11,7 @@ internal static class OpenApiExtensibleExtensions
/// A dictionary of .
/// The key corresponding to the .
/// A value matching the provided extensionKey. Return null when extensionKey is not found.
- internal static string GetExtension(this Dictionary extensions, string extensionKey)
+ internal static string GetExtension(this IDictionary extensions, string extensionKey)
{
if (extensions.TryGetValue(extensionKey, out var value) && value is JsonNodeExtension { Node: JsonValue castValue } && castValue.TryGetValue(out var stringValue))
{
diff --git a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs
index a4614e583..bb4bc58d9 100644
--- a/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs
+++ b/src/Microsoft.OpenApi.Hidi/Formatters/PowerShellFormatter.cs
@@ -74,7 +74,7 @@ public override void Visit(OpenApiOperation operation)
// Order matters. Resolve operationId.
operationId = RemoveHashSuffix(operationId);
if (operationTypeExtension.IsEquals("action") || operationTypeExtension.IsEquals("function"))
- operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? []);
+ operationId = RemoveKeyTypeSegment(operationId, operation.Parameters ?? new List());
operationId = SingularizeAndDeduplicateOperationId(operationId.SplitByChar('.'));
operationId = ResolveODataCastOperationId(operationId);
operationId = ResolveByRefOperationId(operationId);
@@ -142,7 +142,7 @@ private static string RemoveHashSuffix(string operationId)
return s_hashSuffixRegex.Match(operationId).Value;
}
- private static string RemoveKeyTypeSegment(string operationId, List parameters)
+ private static string RemoveKeyTypeSegment(string operationId, IList parameters)
{
var segments = operationId.SplitByChar('.');
foreach (var parameter in parameters)
@@ -156,7 +156,7 @@ private static string RemoveKeyTypeSegment(string operationId, List parameters)
+ private static void ResolveFunctionParameters(IList parameters)
{
foreach (var parameter in parameters.OfType().Where(static p => p.Content?.Count > 0))
{
diff --git a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs
index d12d9bdfb..f12026d5b 100644
--- a/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs
+++ b/src/Microsoft.OpenApi.Hidi/StatsVisitor.cs
@@ -24,7 +24,7 @@ public override void Visit(IOpenApiSchema schema)
public int HeaderCount { get; set; }
- public override void Visit(Dictionary headers)
+ public override void Visit(IDictionary headers)
{
HeaderCount++;
}
diff --git a/src/Microsoft.OpenApi.Workbench/StatsVisitor.cs b/src/Microsoft.OpenApi.Workbench/StatsVisitor.cs
index 7e9c9e77e..32cb28379 100644
--- a/src/Microsoft.OpenApi.Workbench/StatsVisitor.cs
+++ b/src/Microsoft.OpenApi.Workbench/StatsVisitor.cs
@@ -24,7 +24,7 @@ public override void Visit(IOpenApiSchema schema)
public int HeaderCount { get; set; }
- public override void Visit(Dictionary headers)
+ public override void Visit(IDictionary headers)
{
HeaderCount++;
}
diff --git a/src/Microsoft.OpenApi/Extensions/CollectionExtensions.cs b/src/Microsoft.OpenApi/Extensions/CollectionExtensions.cs
new file mode 100644
index 000000000..303c8ffed
--- /dev/null
+++ b/src/Microsoft.OpenApi/Extensions/CollectionExtensions.cs
@@ -0,0 +1,50 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Microsoft.OpenApi
+{
+ ///
+ /// Dictionary extension methods
+ ///
+ internal static class CollectionExtensions
+ {
+ ///
+ /// Returns a new dictionary with entries sorted by key using a custom comparer.
+ ///
+ internal static IDictionary Sort(
+ this IDictionary source,
+ IComparer comparer)
+ where TKey : notnull
+ {
+#if NET7_0_OR_GREATER
+ ArgumentNullException.ThrowIfNull(nameof(source));
+ ArgumentNullException.ThrowIfNull(nameof(comparer));
+#else
+ if (source == null)
+ throw new ArgumentNullException(nameof(source));
+ if (comparer == null)
+ throw new ArgumentNullException(nameof(comparer));
+#endif
+ return source.OrderBy(kvp => kvp.Key, comparer)
+ .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
+ }
+
+ ///
+ /// Sorts any IEnumerable using the specified comparer and returns a List.
+ ///
+ internal static List Sort(this IEnumerable source, IComparer comparer)
+ {
+#if NET7_0_OR_GREATER
+ ArgumentNullException.ThrowIfNull(source);
+ ArgumentNullException.ThrowIfNull(comparer);
+#else
+ if (source == null)
+ throw new ArgumentNullException(nameof(source));
+ if (comparer == null)
+ throw new ArgumentNullException(nameof(comparer));
+#endif
+ return source.OrderBy(item => item, comparer).ToList();
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Extensions/OpenApiExtensibleExtensions.cs b/src/Microsoft.OpenApi/Extensions/OpenApiExtensibleExtensions.cs
index d0bd11db7..266e36020 100644
--- a/src/Microsoft.OpenApi/Extensions/OpenApiExtensibleExtensions.cs
+++ b/src/Microsoft.OpenApi/Extensions/OpenApiExtensibleExtensions.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using System;
+using System.Collections.Generic;
namespace Microsoft.OpenApi
{
@@ -28,7 +29,7 @@ public static void AddExtension(this T element, string name, IOpenApiExtensio
throw new OpenApiException(string.Format(SRResource.ExtensionFieldNameMustBeginWithXDash, name));
}
- element.Extensions ??= [];
+ element.Extensions ??= new Dictionary();
element.Extensions[name] = Utils.CheckArgumentNull(any);
}
}
diff --git a/src/Microsoft.OpenApi/Interfaces/IMetadataContainer.cs b/src/Microsoft.OpenApi/Interfaces/IMetadataContainer.cs
index d94ca2e0e..529b9fd2c 100644
--- a/src/Microsoft.OpenApi/Interfaces/IMetadataContainer.cs
+++ b/src/Microsoft.OpenApi/Interfaces/IMetadataContainer.cs
@@ -14,5 +14,5 @@ public interface IMetadataContainer
/// A collection of properties associated with the current OpenAPI element to be used by the application.
/// Metadata are NOT (de)serialized with the schema and can be used for custom properties.
///
- Dictionary? Metadata { get; set; }
+ IDictionary? Metadata { get; set; }
}
diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiExtensible.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiExtensible.cs
index ad0416c9d..349a48e6c 100644
--- a/src/Microsoft.OpenApi/Interfaces/IOpenApiExtensible.cs
+++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiExtensible.cs
@@ -13,6 +13,6 @@ public interface IOpenApiExtensible : IOpenApiElement
///
/// Specification extensions.
///
- Dictionary? Extensions { get; set; }
+ IDictionary? Extensions { get; set; }
}
}
diff --git a/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs b/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
index 53051a242..fac742d7d 100644
--- a/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
+++ b/src/Microsoft.OpenApi/Interfaces/IOpenApiReadOnlyExtensible.cs
@@ -10,6 +10,6 @@ public interface IOpenApiReadOnlyExtensible
///
/// Specification extensions.
///
- Dictionary? Extensions { get; }
+ IDictionary? Extensions { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
index 4db52cd61..46f8666aa 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiHeader.cs
@@ -54,11 +54,11 @@ public interface IOpenApiHeader : IOpenApiDescribedElement, IOpenApiReadOnlyExte
///
/// Examples of the media type.
///
- public Dictionary? Examples { get; }
+ public IDictionary? Examples { get; }
///
/// A map containing the representations for the header.
///
- public Dictionary? Content { get; }
+ public IDictionary? Content { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiLink.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiLink.cs
index 1ba6a4b65..09ac35c2f 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiLink.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiLink.cs
@@ -23,7 +23,7 @@ public interface IOpenApiLink : IOpenApiDescribedElement, IOpenApiReadOnlyExtens
///
/// A map representing parameters to pass to an operation as specified with operationId or identified via operationRef.
///
- public Dictionary? Parameters { get; }
+ public IDictionary? Parameters { get; }
///
/// A literal value or {expression} to use as a request body when calling the target operation.
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
index c940f2918..17db255df 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiParameter.cs
@@ -80,7 +80,7 @@ public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyE
/// Furthermore, if referencing a schema which contains an example,
/// the examples value SHALL override the example provided by the schema.
///
- public Dictionary? Examples { get; }
+ public IDictionary? Examples { get; }
///
/// Example of the media type. The example SHOULD match the specified schema and encoding properties
@@ -101,5 +101,5 @@ public interface IOpenApiParameter : IOpenApiDescribedElement, IOpenApiReadOnlyE
/// When example or examples are provided in conjunction with the schema object,
/// the example MUST follow the prescribed serialization strategy for the parameter.
///
- public Dictionary? Content { get; }
+ public IDictionary? Content { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiPathItem.cs
index b9cb5c382..d4bf012fc 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiPathItem.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiPathItem.cs
@@ -18,11 +18,11 @@ public interface IOpenApiPathItem : IOpenApiDescribedElement, IOpenApiSummarized
///
/// An alternative server array to service all operations in this path.
///
- public List? Servers { get; }
+ public IList? Servers { get; }
///
/// A list of parameters that are applicable for all the operations described under this path.
/// These parameters can be overridden at the operation level, but cannot be removed there.
///
- public List? Parameters { get; }
+ public IList? Parameters { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
index 361dc8d46..dfe1e1715 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiRequestBody.cs
@@ -17,7 +17,7 @@ public interface IOpenApiRequestBody : IOpenApiDescribedElement, IOpenApiReadOnl
/// REQUIRED. The content of the request body. The key is a media type or media type range and the value describes it.
/// For requests that match multiple keys, only the most specific key is applicable. e.g. text/plain overrides text/*
///
- public Dictionary? Content { get; }
+ public IDictionary? Content { get; }
///
/// Converts the request body to a body parameter in preparation for a v2 serialization.
///
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
index e4d19a1f0..dfddd7838 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiResponse.cs
@@ -11,18 +11,18 @@ public interface IOpenApiResponse : IOpenApiDescribedElement, IOpenApiReadOnlyEx
///
/// Maps a header name to its definition.
///
- public Dictionary? Headers { get; }
+ public IDictionary? Headers { get; }
///
/// A map containing descriptions of potential response payloads.
/// The key is a media type or media type range and the value describes it.
///
- public Dictionary? Content { get; }
+ public IDictionary? Content { get; }
///
/// A map of operations links that can be followed from the response.
/// The key of the map is a short name for the link,
/// following the naming constraints of the names for Component Objects.
///
- public Dictionary? Links { get; }
+ public IDictionary? Links { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSchema.cs b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSchema.cs
index 51a94fc33..cc3ff51ec 100644
--- a/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSchema.cs
+++ b/src/Microsoft.OpenApi/Models/Interfaces/IOpenApiSchema.cs
@@ -35,7 +35,7 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
///
/// $vocabulary- used in meta-schemas to identify the vocabularies available for use in schemas described by that meta-schema.
///
- public Dictionary? Vocabulary { get; }
+ public IDictionary? Vocabulary { get; }
///
/// $dynamicRef - an applicator that allows for deferring the full resolution until runtime, at which point it is resolved each time it is encountered while evaluating an instance
@@ -51,7 +51,7 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// $defs - reserves a location for schema authors to inline re-usable JSON Schemas into a more general schema.
/// The keyword does not directly affect the validation result
///
- public Dictionary? Definitions { get; }
+ public IDictionary? Definitions { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
@@ -144,19 +144,19 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
/// Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema.
///
- public List? AllOf { get; }
+ public IList? AllOf { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
/// Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema.
///
- public List? OneOf { get; }
+ public IList? OneOf { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
/// Inline or referenced schema MUST be of a Schema Object and not a standard JSON Schema.
///
- public List? AnyOf { get; }
+ public IList? AnyOf { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
@@ -167,7 +167,7 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
///
- public HashSet? Required { get; }
+ public ISet? Required { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
@@ -195,7 +195,7 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
/// Property definitions MUST be a Schema Object and not a standard JSON Schema (inline or referenced).
///
- public Dictionary? Properties { get; }
+ public IDictionary? Properties { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
@@ -204,7 +204,7 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// egular expression dialect. Each property value of this object MUST be an object, and each object MUST
/// be a valid Schema Object not a standard JSON Schema.
///
- public Dictionary? PatternProperties { get; }
+ public IDictionary? PatternProperties { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
@@ -246,12 +246,12 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
/// To represent examples that cannot be naturally represented in JSON or YAML,
/// a list of values can be used to contain the examples with escaping where necessary.
///
- public List? Examples { get; }
+ public IList? Examples { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
///
- public List? Enum { get; }
+ public IList? Enum { get; }
///
/// Follow JSON Schema definition: https://json-schema.org/draft/2020-12/json-schema-validation
@@ -278,10 +278,10 @@ public interface IOpenApiSchema : IOpenApiDescribedElement, IOpenApiReadOnlyExte
///
/// This object stores any unrecognized keywords found in the schema.
///
- public Dictionary? UnrecognizedKeywords { get; }
+ public IDictionary? UnrecognizedKeywords { get; }
///
/// Follow JSON Schema definition:https://json-schema.org/draft/2020-12/json-schema-validation#section-6.5.4
///
- public Dictionary>? DependentRequired { get; }
+ public IDictionary>? DependentRequired { get; }
}
diff --git a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs
index 90bb8ef62..7a67e3bdf 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiCallback.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiCallback.cs
@@ -18,7 +18,7 @@ public class OpenApiCallback : IOpenApiExtensible, IOpenApiCallback
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
index 101fd7e51..a27cae914 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiComponents.cs
@@ -15,57 +15,57 @@ public class OpenApiComponents : IOpenApiSerializable, IOpenApiExtensible
///
/// An object to hold reusable Objects.
///
- public Dictionary? Schemas { get; set; }
+ public IDictionary? Schemas { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? Responses { get; set; }
+ public IDictionary? Responses { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? Parameters { get; set; }
+ public IDictionary? Parameters { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? Examples { get; set; }
+ public IDictionary? Examples { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? RequestBodies { get; set; }
+ public IDictionary? RequestBodies { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? Headers { get; set; }
+ public IDictionary? Headers { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? SecuritySchemes { get; set; }
+ public IDictionary? SecuritySchemes { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? Links { get; set; }
+ public IDictionary? Links { get; set; }
///
/// An object to hold reusable Objects.
///
- public Dictionary? Callbacks { get; set; }
+ public IDictionary? Callbacks { get; set; }
///
/// An object to hold reusable Object.
///
- public Dictionary? PathItems { get; set; }
+ public IDictionary? PathItems { get; set; }
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiContact.cs b/src/Microsoft.OpenApi/Models/OpenApiContact.cs
index 40af53558..276566d56 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiContact.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiContact.cs
@@ -30,7 +30,7 @@ public class OpenApiContact : IOpenApiSerializable, IOpenApiExtensible
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs
index b5be98c88..96361d3d4 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs
@@ -18,12 +18,12 @@ public class OpenApiDiscriminator : IOpenApiSerializable, IOpenApiExtensible
///
/// An object to hold mappings between payload values and schema names or references.
///
- public Dictionary? Mapping { get; set; }
+ public IDictionary? Mapping { get; set; }
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
index ddf9fde39..ff243b665 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiDocument.cs
@@ -43,7 +43,7 @@ public void RegisterComponents()
///
/// An array of Server Objects, which provide connectivity information to a target server.
///
- public List? Servers { get; set; } = [];
+ public IList? Servers { get; set; } = [];
///
/// REQUIRED. The available paths and operations for the API.
@@ -55,7 +55,7 @@ public void RegisterComponents()
/// A map of requests initiated other than by an API call, for example by an out of band registration.
/// The key name is a unique string to refer to each webhook, while the (optionally referenced) Path Item Object describes a request that may be initiated by the API provider and the expected responses
///
- public Dictionary? Webhooks { get; set; }
+ public IDictionary? Webhooks { get; set; }
///
/// An element to hold various schemas for the specification.
@@ -65,13 +65,13 @@ public void RegisterComponents()
///
/// A declaration of which security mechanisms can be used across the API.
///
- public List? Security { get; set; }
+ public IList? Security { get; set; }
- private HashSet? _tags;
+ private ISet? _tags;
///
/// A list of tags used by the specification with additional metadata.
///
- public HashSet? Tags
+ public ISet? Tags
{
get
{
@@ -97,10 +97,10 @@ public HashSet? Tags
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
- public Dictionary? Metadata { get; set; }
+ public IDictionary? Metadata { get; set; }
///
/// Absolute location of the document or a generated placeholder if location is not given
@@ -408,7 +408,7 @@ public void SerializeAsV2(IOpenApiWriter writer)
return server.ReplaceServerUrlVariables([]);
}
- private static void WriteHostInfoV2(IOpenApiWriter writer, List? servers)
+ private static void WriteHostInfoV2(IOpenApiWriter writer, IList? servers)
{
if (servers == null || !servers.Any())
{
@@ -660,7 +660,7 @@ public bool AddComponent(string id, T componentToRegister)
Utils.CheckArgumentNullOrEmpty(id);
Components ??= new();
- static bool AddToDictionary(Dictionary dict, string key, TValue value)
+ static bool AddToDictionary(IDictionary dict, string key, TValue value)
{
#if NET5_0_OR_GREATER
return dict.TryAdd(key, value);
@@ -678,43 +678,43 @@ static bool AddToDictionary(Dictionary dict, string key,
switch (componentToRegister)
{
case IOpenApiSchema openApiSchema:
- Components.Schemas ??= [];
+ Components.Schemas ??= new Dictionary();
added = AddToDictionary(Components.Schemas, id, openApiSchema);
break;
case IOpenApiParameter openApiParameter:
- Components.Parameters ??= [];
+ Components.Parameters ??= new Dictionary();
added = AddToDictionary(Components.Parameters, id, openApiParameter);
break;
case IOpenApiResponse openApiResponse:
- Components.Responses ??= [];
+ Components.Responses ??= new Dictionary();
added = AddToDictionary(Components.Responses, id, openApiResponse);
break;
case IOpenApiRequestBody openApiRequestBody:
- Components.RequestBodies ??= [];
+ Components.RequestBodies ??= new Dictionary();
added = AddToDictionary(Components.RequestBodies, id, openApiRequestBody);
break;
case IOpenApiLink openApiLink:
- Components.Links ??= [];
+ Components.Links ??= new Dictionary();
added = AddToDictionary(Components.Links, id, openApiLink);
break;
case IOpenApiCallback openApiCallback:
- Components.Callbacks ??= [];
+ Components.Callbacks ??= new Dictionary();
added = AddToDictionary(Components.Callbacks, id, openApiCallback);
break;
case IOpenApiPathItem openApiPathItem:
- Components.PathItems ??= [];
+ Components.PathItems ??= new Dictionary();
added = AddToDictionary(Components.PathItems, id, openApiPathItem);
break;
case IOpenApiExample openApiExample:
- Components.Examples ??= [];
+ Components.Examples ??= new Dictionary();
added = AddToDictionary(Components.Examples, id, openApiExample);
break;
case IOpenApiHeader openApiHeader:
- Components.Headers ??= [];
+ Components.Headers ??= new Dictionary();
added = AddToDictionary(Components.Headers, id, openApiHeader);
break;
case IOpenApiSecurityScheme openApiSecurityScheme:
- Components.SecuritySchemes ??= [];
+ Components.SecuritySchemes ??= new Dictionary();
added = AddToDictionary(Components.SecuritySchemes, id, openApiSecurityScheme);
break;
default:
diff --git a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs
index c7bccbfcb..b478b8074 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiEncoding.cs
@@ -21,7 +21,7 @@ public class OpenApiEncoding : IOpenApiSerializable, IOpenApiExtensible
///
/// A map allowing additional information to be provided as headers.
///
- public Dictionary? Headers { get; set; }
+ public IDictionary? Headers { get; set; }
///
/// Describes how a specific property value will be serialized depending on its type.
@@ -48,7 +48,7 @@ public class OpenApiEncoding : IOpenApiSerializable, IOpenApiExtensible
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiExample.cs b/src/Microsoft.OpenApi/Models/OpenApiExample.cs
index 42b839867..0ebea9da9 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExample.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExample.cs
@@ -24,7 +24,7 @@ public class OpenApiExample : IOpenApiExtensible, IOpenApiExample
public JsonNode? Value { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs
index 508885efe..bf49f9099 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExtensibleDictionary.cs
@@ -34,7 +34,7 @@ protected OpenApiExtensibleDictionary(
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
diff --git a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
index 43da4bb20..8c16397c0 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs
@@ -24,7 +24,7 @@ public class OpenApiExternalDocs : IOpenApiSerializable, IOpenApiExtensible
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
index fe34c46fd..8bb155f85 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiHeader.cs
@@ -41,13 +41,13 @@ public class OpenApiHeader : IOpenApiHeader, IOpenApiExtensible
public JsonNode? Example { get; set; }
///
- public Dictionary? Examples { get; set; }
+ public IDictionary? Examples { get; set; }
///
- public Dictionary? Content { get; set; }
+ public IDictionary? Content { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs
index 1925f3b4b..8b004bf74 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiInfo.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiInfo.cs
@@ -49,7 +49,7 @@ public class OpenApiInfo : IOpenApiSerializable, IOpenApiExtensible
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs
index 542d02d02..04a267bdc 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiLicense.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiLicense.cs
@@ -29,7 +29,7 @@ public class OpenApiLicense : IOpenApiSerializable, IOpenApiExtensible
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameterless constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiLink.cs b/src/Microsoft.OpenApi/Models/OpenApiLink.cs
index 7f7d06773..1571dcadd 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiLink.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiLink.cs
@@ -18,7 +18,7 @@ public class OpenApiLink : IOpenApiExtensible, IOpenApiLink
public string? OperationId { get; set; }
///
- public Dictionary? Parameters { get; set; }
+ public IDictionary? Parameters { get; set; }
///
public RuntimeExpressionAnyWrapper? RequestBody { get; set; }
@@ -30,7 +30,7 @@ public class OpenApiLink : IOpenApiExtensible, IOpenApiLink
public OpenApiServer? Server { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameterless constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs
index 3e11e0810..7520678e1 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiMediaType.cs
@@ -28,7 +28,7 @@ public class OpenApiMediaType : IOpenApiSerializable, IOpenApiExtensible
/// Examples of the media type.
/// Each example object SHOULD match the media type and specified schema if present.
///
- public Dictionary? Examples { get; set; }
+ public IDictionary? Examples { get; set; }
///
/// A map between a property name and its encoding information.
@@ -36,12 +36,12 @@ public class OpenApiMediaType : IOpenApiSerializable, IOpenApiExtensible
/// The encoding object SHALL only apply to requestBody objects
/// when the media type is multipart or application/x-www-form-urlencoded.
///
- public Dictionary? Encoding { get; set; }
+ public IDictionary? Encoding { get; set; }
///
/// Serialize to Open Api v3.0.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameterless constructor
@@ -115,7 +115,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
// Media type does not exist in V2.
}
- private static void SerializeExamples(IOpenApiWriter writer, Dictionary examples, Action callback)
+ private static void SerializeExamples(IOpenApiWriter writer, IDictionary examples, Action callback)
{
/* Special case for writing out empty arrays as valid response examples
* Check if there is any example with an empty array as its value and set the flag `hasEmptyArray` to true
diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
index fa0a60684..5bfeba500 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlow.cs
@@ -31,12 +31,12 @@ public class OpenApiOAuthFlow : IOpenApiSerializable, IOpenApiExtensible
///
/// REQUIRED. A map between the scope name and a short description for it.
///
- public Dictionary? Scopes { get; set; }
+ public IDictionary? Scopes { get; set; }
///
/// Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameterless constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs
index a12dc1000..16a6f17b3 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiOAuthFlows.cs
@@ -34,7 +34,7 @@ public class OpenApiOAuthFlows : IOpenApiSerializable, IOpenApiExtensible
///
/// Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameterless constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs
index 21e4f5ea2..d354907ee 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiOperation.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiOperation.cs
@@ -17,12 +17,12 @@ public class OpenApiOperation : IOpenApiSerializable, IOpenApiExtensible, IMetad
///
public const bool DeprecatedDefault = false;
- private HashSet? _tags;
+ private ISet? _tags;
///
/// A list of tags for API documentation control.
/// Tags can be used for logical grouping of operations by resources or any other qualifier.
///
- public HashSet? Tags
+ public ISet? Tags
{
get
{
@@ -69,7 +69,7 @@ public HashSet? Tags
/// The list MUST NOT include duplicated parameters. A unique parameter is defined by a combination of a name and location.
/// The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters.
///
- public List? Parameters { get; set; }
+ public IList? Parameters { get; set; }
///
/// The request body applicable for this operation.
@@ -92,7 +92,7 @@ public HashSet? Tags
/// The key value used to identify the callback object is an expression, evaluated at runtime,
/// that identifies a URL to use for the callback operation.
///
- public Dictionary? Callbacks { get; set; }
+ public IDictionary? Callbacks { get; set; }
///
/// Declares this operation to be deprecated. Consumers SHOULD refrain from usage of the declared operation.
@@ -106,22 +106,22 @@ public HashSet? Tags
/// This definition overrides any declared top-level security.
/// To remove a top-level security declaration, an empty array can be used.
///
- public List? Security { get; set; }
+ public IList? Security { get; set; }
///
/// An alternative server array to service this operation.
/// If an alternative server object is specified at the Path Item Object or Root level,
/// it will be overridden by this value.
///
- public List? Servers { get; set; }
+ public IList? Servers { get; set; }
///
/// This object MAY be extended with Specification Extensions.
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
- public Dictionary? Metadata { get; set; }
+ public IDictionary? Metadata { get; set; }
///
/// Parameterless constructor
@@ -134,7 +134,7 @@ public OpenApiOperation() { }
public OpenApiOperation(OpenApiOperation operation)
{
Utils.CheckArgumentNull(operation);
- Tags = operation.Tags != null ? [.. operation.Tags] : null;
+ Tags = operation.Tags != null ? new HashSet(operation.Tags) : null;
Summary = operation.Summary ?? Summary;
Description = operation.Description ?? Description;
ExternalDocs = operation.ExternalDocs != null ? new(operation.ExternalDocs) : null;
diff --git a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
index 77c6e1f4e..63b3735e2 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiParameter.cs
@@ -55,16 +55,16 @@ public bool Explode
public IOpenApiSchema? Schema { get; set; }
///
- public Dictionary? Examples { get; set; }
+ public IDictionary? Examples { get; set; }
///
public JsonNode? Example { get; set; }
///
- public Dictionary? Content { get; set; }
+ public IDictionary? Content { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// A parameterless constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs
index bc8a17d22..0be48961d 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiPathItem.cs
@@ -22,13 +22,13 @@ public class OpenApiPathItem : IOpenApiExtensible, IOpenApiPathItem
public Dictionary? Operations { get; set; }
///
- public List? Servers { get; set; }
+ public IList? Servers { get; set; }
///
- public List? Parameters { get; set; }
+ public IList? Parameters { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Add one operation into this path item.
diff --git a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
index cc55bb7e6..8f4c1bd90 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiRequestBody.cs
@@ -19,10 +19,10 @@ public class OpenApiRequestBody : IOpenApiExtensible, IOpenApiRequestBody
public bool Required { get; set; }
///
- public Dictionary? Content { get; set; }
+ public IDictionary? Content { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameter-less constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
index d9446b2ed..6c1af10f1 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiResponse.cs
@@ -16,16 +16,16 @@ public class OpenApiResponse : IOpenApiExtensible, IOpenApiResponse
public string? Description { get; set; }
///
- public Dictionary? Headers { get; set; }
+ public IDictionary? Headers { get; set; }
///
- public Dictionary? Content { get; set; }
+ public IDictionary? Content { get; set; }
///
- public Dictionary? Links { get; set; }
+ public IDictionary? Links { get; set; }
///
- public Dictionary? Extensions { get; set; }
+ public IDictionary? Extensions { get; set; }
///
/// Parameterless constructor
diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
index 6044acad5..17ba10ada 100644
--- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
+++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs
@@ -27,7 +27,7 @@ public class OpenApiSchema : IOpenApiExtensible, IOpenApiSchema, IMetadataContai
public string? Comment { get; set; }
///
- public Dictionary? Vocabulary { get; set; }
+ public IDictionary? Vocabulary { get; set; }
///
public string? DynamicRef { get; set; }
@@ -36,7 +36,7 @@ public class OpenApiSchema : IOpenApiExtensible, IOpenApiSchema, IMetadataContai
public string? DynamicAnchor { get; set; }
///
- public Dictionary? Definitions { get; set; }
+ public IDictionary? Definitions { get; set; }
private string? _exclusiveMaximum;
///
@@ -175,19 +175,19 @@ public string? Minimum
public bool WriteOnly { get; set; }
///
- public List? AllOf { get; set; }
+ public IList? AllOf { get; set; }
///
- public List? OneOf { get; set; }
+ public IList? OneOf { get; set; }
///
- public List? AnyOf { get; set; }
+ public IList? AnyOf { get; set; }
///
public IOpenApiSchema? Not { get; set; }
///
- public HashSet? Required { get; set; }
+ public ISet? Required { get; set; }
///
public IOpenApiSchema? Items { get; set; }
@@ -202,10 +202,10 @@ public string? Minimum
public bool? UniqueItems { get; set; }
///
- public Dictionary? Properties { get; set; }
+ public IDictionary? Properties { get; set; }
///
- public Dictionary? PatternProperties { get; set; }
+ public IDictionary? PatternProperties { get; set; }
///
public int? MaxProperties { get; set; }
@@ -226,10 +226,10 @@ public string? Minimum
public JsonNode? Example { get; set; }
///
- public List? Examples { get; set; }
+ public IList