Javascript 如何将JSON数组反序列化为本机.net数据结构?
我有这样的JSON:Javascript 如何将JSON数组反序列化为本机.net数据结构?,javascript,c#,asp.net,json,Javascript,C#,Asp.net,Json,我有这样的JSON: { "records": [{ "skills": "", "u_past_assignment_groups": "", "urgency": "3", "correlation_id": "", "u_program_name": "", "u_software_name": "", "group_list": "" }] } (这是一个被截断的版本。)但关键是它是一个由键、值对组成的单元素数组 在本机J
{
"records": [{
"skills": "",
"u_past_assignment_groups": "",
"urgency": "3",
"correlation_id": "",
"u_program_name": "",
"u_software_name": "",
"group_list": ""
}]
}
(这是一个被截断的版本。)但关键是它是一个由键、值对组成的单元素数组
在本机JavaScript中,使用JSON.parse
或eval
将此JSON转换为实际的键/值对数组是一个非常简单的步骤,但在.Net中,我无法理解如何将此JSON反序列化为任何有意义的内容。我已经尝试了JavaScriptSerializer.Deserialize
和JavaScriptSerializer.DeserializeObject
的所有排列。无论我尝试什么,我都会继续遇到一些关于无法反序列化或无法强制转换的错误。有人能看一下这个代码片段并告诉我(在本机.Net中)如何将其反序列化为键/值对的列表或数组吗
我是否必须创建自己的对象来存储此数据?我是说,我不想这么做。看起来它应该很容易地符合本机.net数据结构
//process response
Stream respStream = resp.GetResponseStream();
StreamReader respReader = new StreamReader(respStream);
string response = respReader.ReadToEnd();
respStream.Close();
JavaScriptSerializer jsDes = new JavaScriptSerializer();
//***This is the part I can't figure out.***
var objResp = jsDes.DeserializeObject(response);
Dictionary<string, string>[] dicResp = (Dictionary<string, string>[])objResp;
//******************************************
pOutput.InnerText = "Incident Number: " + dicResp[0]["key"];
//进程响应
Stream respStream=resp.GetResponseStream();
StreamReader respReader=新StreamReader(respStream);
字符串响应=respreder.ReadToEnd();
respStream.Close();
JavaScriptSerializer jsDes=新的JavaScriptSerializer();
//***这是我搞不懂的部分***
var objResp=jsDes.DeserializeObject(响应);
Dictionary[]dicResp=(Dictionary[])objResp;
//******************************************
pOutput.InnerText=“事件编号:”+DICREP[0][“键”];
这应该行得通。我将您的示例粘贴到input.txt文件中
string json = File.ReadAllText("input.txt");
JavaScriptSerializer jsDes = new JavaScriptSerializer();
Dictionary<string, object> objResp = (Dictionary<string, object>)jsDes.DeserializeObject(json);
Object[] records =(Object[])objResp["records"];
Dictionary<string,object> results= (Dictionary<string,object>) records[0];
Console.WriteLine(result["urgency"]);
string json=File.ReadAllText(“input.txt”);
JavaScriptSerializer jsDes=新的JavaScriptSerializer();
字典objResp=(字典)jsDes.DeserializeObject(json);
对象[]记录=(对象[])对象[]记录[];
字典结果=(字典)记录[0];
Console.WriteLine(结果[“紧迫性]);
我认为由于您的JSON结构,阅读起来很复杂。您将“records”作为空数组中的第一个条目(使用{}打开和关闭JSON)。
此外,在记录中,还有另一个未索引的数组,其第一个条目是包含键/值对的实际字典。这应该可以。我将您的示例粘贴到input.txt文件中
string json = File.ReadAllText("input.txt");
JavaScriptSerializer jsDes = new JavaScriptSerializer();
Dictionary<string, object> objResp = (Dictionary<string, object>)jsDes.DeserializeObject(json);
Object[] records =(Object[])objResp["records"];
Dictionary<string,object> results= (Dictionary<string,object>) records[0];
Console.WriteLine(result["urgency"]);
string json=File.ReadAllText(“input.txt”);
JavaScriptSerializer jsDes=新的JavaScriptSerializer();
字典objResp=(字典)jsDes.DeserializeObject(json);
对象[]记录=(对象[])对象[]记录[];
字典结果=(字典)记录[0];
Console.WriteLine(结果[“紧迫性]);
我认为由于您的JSON结构,阅读起来很复杂。您将“records”作为空数组中的第一个条目(使用{}打开和关闭JSON)。
此外,在记录中,还有另一个未索引的数组,其第一项是包含键/值对的实际字典。您没有说是否可以使用第三方库,但我认为Json.NET比JavascriptSerializer更好(更多功能和性能)。您可以通过以下方式完成所需:
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(response);
Dictionary values=JsonConvert.DeserializeObject(响应);
关于Json.Net的更多信息:您没有说是否可以使用第三方库,但我认为Json.Net比JavascriptSerializer更好(更多功能和性能)。您可以通过以下方式完成所需:
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(response);
Dictionary values=JsonConvert.DeserializeObject(响应);
关于Json.Net的更多信息:这有点让人困惑,但请不要仅针对代码块使用代码片段。为此使用代码块。代码段用于在浏览器代码中运行。我明白了。道歉。我读过这个论坛,但很少发帖。我会记住这一点。这有点让人困惑,但请不要只对代码块使用代码片段。为此使用代码块。代码段用于在浏览器代码中运行。我明白了。道歉。我读过这个论坛,但很少发帖。我会记住这一点。我在搜索解决方案时多次看到这个库被引用,但最终我想学习如何使用本机.net对象。我在问题中附带提到了这一点。最终我下载了这个库,并对它的性能感到满意。感谢您抽出时间回答我的问题。我在搜索解决方案时多次看到此库被引用,但最终我想学习如何使用本机.net对象。我在问题中附带提到了这一点。最终我下载了这个库,并对它的性能感到满意。谢谢你花时间回答我的问题。是的。不幸的是,在我的例子中,我无法控制JSON的格式。你的解决方案奏效了。(必须在最后一行的“结果”中添加一个“s”,以使变量匹配)。因为我要求使用本机.net解决方案,而您给了我一个,所以我将此标记为答案。最后,我从codeplex下载了JSON.net库。它看起来更强大。感谢您抽出时间回答我的问题。我遵守您使用图书馆的决定。这是一种更有效、更好的做法。不客气!对不幸的是,在我的例子中,我无法控制JSON的格式。你的解决方案奏效了。(必须在最后一行的“结果”中添加一个“s”,以使变量匹配)。因为我要求使用本机.net解决方案,而您给了我一个,所以我将此标记为答案。最后,我从codeplex下载了JSON.net库。它看起来更强大。感谢您抽出时间回答我的问题。我遵守您使用图书馆的决定。这是一种更有效、更好的做法。不客气!