in openapi-diff/src/modeler/AutoRest.Swagger/PathLevelParameterConverter.cs [65:114]
public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue,
JsonSerializer serializer)
{
JObject jo = JObject.Load(reader);
if (jo["parameters"] != null)
{
var commonParameters = new Dictionary<string, JObject>();
foreach (JObject param in jo["parameters"] as JArray)
{
string key = GetParameterKey(param);
commonParameters[key] = param;
}
// Iterating over the operations to merge the common parameters if they do not exist
foreach (JObject operation in jo.Properties()
.Where(p => p.Name != "parameters")
.Select(p => p.Value as JObject))
{
if (operation["parameters"] == null)
{
operation["parameters"] = new JArray();
}
foreach (var key in commonParameters.Keys)
{
if (!(operation["parameters"] as JArray).Any(p => GetParameterKey(p as JObject) == key))
{
(operation["parameters"] as JArray).Add(commonParameters[key]);
}
}
}
// Removing the common parameters to avoid serialization errors
jo.Remove("parameters");
}
var result = new Dictionary<string, Operation>();
foreach (JProperty operation in jo.Children())
{
if (operation.Name == null || operation.Name.StartsWith("x-"))
{
continue;
}
result[operation.Name] = JsonConvert.DeserializeObject<Operation>(operation.Value.ToString(),
GetSettings(serializer));
}
return result;
}