public static async Task <object[]> GetObjects(this HttpListenerContext context, MethodInfo action) { return((await context.GetQueryData(action)) .Concat(await context.GetRouteData(action)) .Concat(await context.GetBodyData(action)) .ToDictionary ( kvp => kvp.Key, kvp => kvp.Key.ParameterType.IsPrimitive ? kvp.Value.ChangeType(kvp.Key.ParameterType) : JsonSerializer.Deserialize(kvp.Value, kvp.Key.ParameterType) ) .OrderBy(kvp => kvp.Key.Position) .Select(kvp => kvp.Value) .ToArray()); }