我试过了:

  NameValueCollection Data = new NameValueCollection();
  Data.Add("foo","baa");
  string json = new JavaScriptSerializer().Serialize(Data);

它返回:["foo"]我期望的{"foo" : "baa"}我该怎么做?

最佳答案

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

关于c# - 如何将NameValueCollection转换为JSON字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7003740/

10-12 12:25