public override object ReadJson()

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;
        }