private static JToken ToJToken(HashSet <string> values, DupPolicy policy) { if (values == null) { throw new ArgumentNullException(nameof(values)); } if (values.Count == 0) { throw new ArgumentException("the collection of values is empty", nameof(values)); } if (values.Count == 1) { JToken.FromObject(values.First()); } switch (policy) { case DupPolicy.OnlyLast: return(JToken.FromObject(values.Last())); case DupPolicy.OnlyFirst: return(JToken.FromObject(values.First())); case DupPolicy.Throw: throw new InvalidOperationException("the collection contains more than one value"); case DupPolicy.Array: return(JArray.FromObject(values)); default: throw new ArgumentOutOfRangeException(nameof(policy), policy, null); } }
public static JObject ToJObject(this NameValueCollection col, DupPolicy policy = DupPolicy.OnlyLast) { var obj = new JObject(); foreach (var k in col.AllKeys) { var values = col.GetValues(k).Touch().ToHashSet(); if (values.Count > 0) { obj.Add(k, ToJToken(values, policy)); } } return(obj); }
public static JObject ToJObject(this IEnumerable <KeyValuePair <string, string> > pairs, DupPolicy policy = DupPolicy.OnlyLast) { var obj = new JObject(); foreach (var pair in pairs.GroupBy(m => m.Key)) { var values = pair.Select(m => m.Value).ToHashSet(); if (values.Count > 0) { obj.Add(pair.Key, ToJToken(values, policy)); } } return(obj); }