NamevalueCollection不是IDictionary,因此
JavascriptSerializer无法直接将其序列化。您首先需要将其转换为字典,然后对其进行序列化。
更新
:关于每个键多个值的问题之后,对的调用
nvc[key]将简单地将它们返回,并以逗号分隔,这可能没问题。如果不是,则总是可以调用
GetValues并决定如何适当地使用这些值。更新了下面的代码以显示一种可能的方法。
public class StackOverflow_7003740{ static Dictionary<string, object> NvcToDictionary(NamevalueCollection nvc, bool handleMultiplevaluesPerKey) { var result = new Dictionary<string, object>(); foreach (string key in nvc.Keys) { if (handleMultiplevaluesPerKey) { string[] values = nvc.GetValues(key); if (values.Length == 1) { result.Add(key, values[0]); } else { result.Add(key, values); } } else { result.Add(key, nvc[key]); } } return result; } public static void Test() { NamevalueCollection nvc = new NamevalueCollection(); nvc.Add("foo", "bar"); nvc.Add("multiple", "first"); nvc.Add("multiple", "second"); foreach (var handleMultiplevaluesPerKey in new bool[] { false, true }) { if (handleMultiplevaluesPerKey) { Console.WriteLine("Using special handling for multiple values per key"); } var dict = NvcToDictionary(nvc, handleMultiplevaluesPerKey); string json = new JavascriptSerializer().Serialize(dict); Console.WriteLine(json); Console.WriteLine(); } }}


