【问题标题】:Deserialize from json string to list of dictionary?从json字符串反序列化到字典列表?
【发布时间】:2018-12-03 13:17:33
【问题描述】:

我从 ajax 方法传递 json 对象数组。

                var FieldValue = {
                    Key: $(this).attr("id"),
                    Value: $(this).val()
                };
                FieldValues.push(FieldValue);

        $.ajax({
            url: "../Handler.ashx?&Action=Save",
            data: JSON.stringify(FieldValues),
            type: "post",
            datatype: "json",
            contentType: "application/json; charset=utf-8",
        });

但是当我试图反序列化为字典列表时。

JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
List<Dictionary<string, string>> WebFields = new List<Dictionary<string, string>>();
WebFields = javaScriptSerializer.Deserialize<List<Dictionary<string, string>>>(jsonString);

我的预期输出列表是这样的,

  string Key =  WebFields[0].Key
  string Value =  WebFields[0].Value

但现在就像每个 WebField 项目一样,

WebFields[0]  -> [0] -> Key
                 [1]  -> Value

如何达到我的预期输出?

【问题讨论】:

  • List&lt;Dictionary&lt;string, string&gt;&gt; 应该是Dictionary&lt;string, string&gt; 字典本质上是KeyValuePair 的列表,所以您正在制作列表列表,这就是您想要的吗?
  • @Matt 如果我更改为 Dictionary 出现异常,'WebFields = javaScriptSerializer.Deserialize>(jsonString)' 抛出类型为 'System.InvalidOperationException 的异常'
  • @vinothkumar,您能否显示您的数据包含在JSON.stringify(FieldValues), 中?
  • @vinothkumar,表示您的jsonString 在后端的外观如何?
  • @er-shoaib var jsonString = "[{\"Key\":\"1_1_1_1_1_TXT\",\"Value\":\"\"},{\"Key\":\ "2_TXT\",\"Value\":\"\"},{\"Key\":\"3_TXT\","Value":\"\"}]"

标签: c# .net json.net deserialization


【解决方案1】:

要获取字典服务器端,请尝试发送基本 POJO。 而不是:

 var FieldValue = {
                Key: $(this).attr("id"),
                Value: $(this).val()
            };
  FieldValues.push(FieldValue);

尝试:

 var key = $(this).attr("id");
 var value =$(this).val()
 var fieldValue = { key: value };
 fieldValues.push(fieldValue);

一个 javascript 对象被表示为一个键值对,因此返回一个 Dictionary 将返回一个 JS 对象,键是 propname,值是值

【讨论】:

  • 它就像 WebFields[0] -> [0] -> {"Key" : } 另外,如果我喜欢这个键,每个项目都会不同。
  • 密钥基本上每次都不同。尝试将 c# 中的重复键添加到字典中,您将收到异常。您将其包装为 List> 而它应该是 Dictionary。没有列表
  • 感谢您的方法。稍作修改,它对我有用, var key = $(this).attr("id"); var 值 =$(this).val(); FieldValues[key] = value;
  • 太棒了!这也有效(原始机制也应该,但可能是大小写不匹配),我认为你的方式是一种更易读的方式。如果我可以提供任何不请自来的建议,请尽量远离 Dictionary 和 JSON。如果我需要处理这种类型的结构,我倾向于使用公共字符串 Key 和公共字符串 Value 创建一个名为 CustomKvP 的类。但是 99.99% 使用自己的 POCO
猜你喜欢
  • 2013-07-16
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多