簡體   English   中英

如何將JSON數組反序列化為本地.net數據結構?

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

我有看起來像這樣的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

這應該工作。 我將您的示例粘貼到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"]);

由於您的JSON結構,我認為讀取起來很復雜。 您將“ records”作為一個空數組中的第一個條目(使用{}打開和關閉JSON)。 此外,在記錄內部,您還有另一個未索引的數組,其第一個條目是包含鍵/值對的實際字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM