协慌网

登录 贡献 社区

如何在 ASP.NET 中将 JSON 反序列化为简单的 Dictionary <string,string>?

我有一个简单的 JSON 键 / 值列表,该列表通过 POST 发送回 ASP.NET。例子:

{ "key1": "value1", "key2": "value2"}

我不想将其反序列化为严格类型的. NET 对象

我只需要一个普通的旧Dictionary(Of String,String)或一些等效项(哈希表,Dictionary(Of String,Object),老式的 StringDictionary - 地狱,二维字符串数组对我来说就行。

我可以使用 ASP.NET 3.5 以及流行的 Json.NET(我已经在使用它序列化客户端)中使用的任何东西。

显然,这两个 JSON 库都不具备这种明显的前额拍击功能,它们完全专注于通过强合同进行基于反射的反序列化。

有任何想法吗?

局限性:

  1. 我不想实现自己的 JSON 解析器
  2. 尚不能使用 ASP.NET 4.0
  3. 希望远离旧的,不推荐使用的 JSON ASP.NET 类

答案

Json.NET做到了...

string json = @"{""key1"":""value1"",""key2"":""value2""}";

var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

更多示例:使用 Json.NET 序列化集合

我确实发现. NET 通过System.Web.Extensions程序集中的System.Web.Script.Serialization.JavaScriptSerializer类型将 JSON 字符串转换为Dictionary<String, Object>使用方法DeserializeObject(String)

在将内容类型为 application / json 的 ajax 发布(通过 jquery)发布到静态. net Page Method 时,我偶然发现了该方法(具有单个Object类型的参数)神奇地接收了此 Dictionary。

对于那些在互联网上搜寻并绊脚石的人,我写了一篇有关如何使用 JavaScriptSerializer 类的博客文章。

了解更多... http://procbits.com/2011/04/21/quick-json-serializationdeserialization-in-c/

这是一个例子:

var json = "{\"id\":\"13\", \"value\": true}";
var jss = new JavaScriptSerializer();
var table = jss.Deserialize<dynamic>(json);
Console.WriteLine(table["id"]);
Console.WriteLine(table["value"]);