/// <summary> /// <para>Converts the <paramref name="parameters"/> to their equivalent query string representation.</para> /// <para>NOTE. Default values are excluded</para> /// </summary> /// <typeparam name="TOrder">The type of the <see cref="PagedParameters{TOrder}.Order"/> property.</typeparam> public static string ToQuery <TOrder>(this PagedParameters <TOrder> parameters) where TOrder : struct { IEnumerable <KeyValuePair <string, string> > keyValuePairs = parameters.ToKvp(); StringBuilder stringBuilder = new StringBuilder(); foreach (KeyValuePair <string, string> keyValuePair in keyValuePairs) { if (stringBuilder.Length > 0) { stringBuilder.Append('&'); } stringBuilder.Append(Uri.EscapeDataString(keyValuePair.Key)); stringBuilder.Append('='); stringBuilder.Append(Uri.EscapeDataString(keyValuePair.Value)); } return(stringBuilder.ToString()); }
/// <summary> /// <para>Converts the <paramref name="parameters"/> to their equivalent key value pair representation.</para> /// <para>NOTE. Default values are excluded</para> /// </summary> /// <typeparam name="TOrder">The type of the <see cref="PagedParameters{TOrder}.Order"/> property.</typeparam> public static IEnumerable <KeyValuePair <string, string> > ToKvp <TOrder>(this PagedParameters <TOrder> parameters) where TOrder : struct { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } // Remove default values to ensure they're not passed as parameters. JsonSerializer serializer = JsonSerializer.CreateDefault(new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore, }); JObject json = JObject.FromObject(parameters, serializer); return (((IDictionary <string, JToken>)json).Select( kvp => new KeyValuePair <string, string>(kvp.Key, kvp.Value.Value <string>()))); }