-1

我有一个如下的 JSON 字符串:

"\"{\\\"PersonNumber\\\":\\\"4537\\\",\\\"PersonName\\\":\\\"Jenny\\\"}\""

我想将此 JSON 转换为 NameValueCollection,并尝试了以下代码。但我收到一个错误:

string jsonString= "\"{\\\"PersonNumber\\\":\\\"4537\\\",\\\"PersonName\\\":\\\"Jenny\\\"}\""
System.Web.Script.Serialization.JavaScriptSerializer jss1;
NameValueCollection nvc1;
jss1 = new System.Web.Script.Serialization.JavaScriptSerializer();
nvc1 = new NameValueCollection();
try { nvc1 = jss1.Deserialize<NameValueCollection>(jsonString); } catch { }

错误:

无法将“System.String”类型的对象转换为“System.Collections.Specialized.NameValueCollection”类型

我在哪里犯错?

4

2 回答 2

0

Given a pretty simple extension method on Dictionary<string,T>:

public static class DictionaryExtensions
{
    public static NameValueCollection ToNameValueCollection<T>(this IDictionary<string, T> dictionary)
    {
        var collection = new NameValueCollection();
        foreach(var pair in dictionary)
            collection.Add(pair.Key, pair.Value?.ToString());
        return collection;
    }
}

This is as easy as deserializing your json to a dictionary and using the extension method:

var nvc = JsonConvert.DeserializeObject<Dictionary<string,string>>(jsonString)
                     .ToNameValueCollection();

Note: Uses Newtonsoft.Json, but any deserializer should be able to deserialize your jsonString directly to Dictionary<string,string>.

Live example: https://dotnetfiddle.net/vxqumd

于 2019-09-16T14:42:11.277 回答
0

如果您特别需要一个,NameValueCollection那么最简单的方法就是简单地使用DeserializeObject然后将项目添加到一个NameValueCollection这样的:

string jsonString= "\"{\\\"PersonNumber\\\":\\\"4537\\\",\\\"PersonName\\\":\\\"Jenny\\\"}\""

System.Web.Script.Serialization.JavaScriptSerializer jss1;
NameValueCollection nvc1;
IDictionary<string, object> dict;

jss1 = new System.Web.Script.Serialization.JavaScriptSerializer();
nvc1 = new NameValueCollection();
dict = jss1.DeserializeObject(jsonString);

foreach (var kvPair in dict)
{
  nvc1.Add(kvPair.Key, kvPair.Value);
}
于 2019-09-16T14:27:43.200 回答