如何将 JSON 数组反序列化为本机 .net 数据结构

How can I deserialize a JSON array into a native .net data structure?

本文关键字:本机 net 数据结构 反序列化 数组 JSON      更新时间:2023-09-26

我有看起来像这样的JSON:

{
  "records": [{
    "skills": "",
    "u_past_assignment_groups": "",
    "urgency": "3",
    "correlation_id": "",
    "u_program_name": "",
    "u_software_name": "",
    "group_list": ""
  }]
}

(这是一个截断的版本。但关键是它是键值对的单元素数组。

在原生 JavaScript 中,使用 JSON.parseeval 将此 JSON 转换为实际的键/值对数组是一个非常简单的步骤,但是在 .Net 中,我无法弄清楚如何将此 JSON 反序列化为任何有意义的内容。 我已经尝试了我能想到的JavaScriptSerializer.DeserializeJavaScriptSerializer.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"];

你没有说你是否可以使用第三方库,但我认为 Json.NET 比JavascriptSerializer更好(更多的功能和性能)。您可以使用以下方法完成所需的内容:

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

关于 Json.Net:http://james.newtonking.com/json

的更多信息

这应该有效。我将您的示例粘贴到输入.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"]);

我认为由于您的 JSON 结构,阅读起来很复杂。您将"记录"作为空数组中的第一个条目(使用 {} 打开和关闭 JSON)。此外,在记录中,您还有另一个未编制索引的数组,其第一个条目是包含键/值对的实际字典。