[英]Extracting data from a dynamic JSON array
我正在將動態 JSON 對象轉換為 C# 中的 Excel。 我已經嘗試了以下步驟。 從數據庫中,我以字符串形式收到以下響應。
[ {"ResourceName":"AH","ProjectID":1,"WeekNo":2,"02 Dec 2019":7.00,"03 Dec 2019":7.50,"04 Dec 2019":7.00,"05 Dec 2019":7.50,"06 Dec 2019":7.00},{"ResourceName":"CK","ProjectID":1,"WeekNo":2,"02 Dec 2019":6.00,"03 Dec 2019":5.00,"04 Dec 2019":3.00,"05 Dec 2019":2.00,"06 Dec 2019":5.00}, {"ResourceName":"AH","ProjectID":1,"WeekNo":3,"09 Dec 2019":6.00,"10 Dec 2019":7.50,"11 Dec 2019":7.00,"12 Dec 2019":7.50,"13 Dec 2019":8.00},{"ResourceName":"CK","ProjectID":1,"WeekNo":3,"09 Dec 2019":6.00,"10 Dec 2019":4.00,"11 Dec 2019":null,"12 Dec 2019":5.00,"13 Dec 2019":4.00},{"ResourceName":"SL","ProjectID":1,"WeekNo":3,"09 Dec 2019":null,"10 Dec 2019":1.50,"11 Dec 2019":null,"12 Dec 2019":1.50,"13 Dec 2019":0.50}, {"ResourceName":"AH","ProjectID":1,"WeekNo":4,"16 Dec 2019":7.00},{"ResourceName":"CK","ProjectID":1,"WeekNo":4,"16 Dec 2019":3.00} ]
我需要將上述字符串轉換為 JSON 並執行循環操作,以便為 Excel 創建設置標題和詳細值。 我使用了下面的方法來創建一個dynamic
對象。
ResourceName 和動態日期應作為列標題。 由於date
值是動態的,因此無法創建模型。
using System.Web.Helpers;
dynamic jsonObject = Json.Decode(response);
我能夠從 QuickWatch 中提取值,但是,輸出僅在運行時生成,如下所示。
(new System.Collections.Generic.Mscorlib_DictionaryDebugView<string, object>(((System.Web.Helpers.DynamicJsonObject)((System.Web.Helpers.DynamicJsonArray)jsonObject)._arrayValues[0])._values).Items[0]).Key
有沒有辦法循環遍歷動態數組內容?
只需獲取字符串並使用 JavaScriptSerializer 將其反序列化為本機對象。 例如,有這個 json:
您現在可以通過執行以下操作將 JSON 字符串反序列化為 Dynamic 數組:
JavaScriptSerializer js = new JavaScriptSerializer();
var resourceData = js.Deserialize<Dynamic[]>(json);
我建議將 JSON 反序列化為字典集合,而不是使用Dynamic
,此方法提供類型安全性和迭代。 以下示例使用 Newtonsoft.Json NuGet 包:
示例.json:
[
{
"ResourceName": "AH",
"ProjectID": 1,
"WeekNo": 2,
"02 Dec 2019": 7.00,
"03 Dec 2019": 7.50,
"04 Dec 2019": 7.00,
"05 Dec 2019": 7.50,
"06 Dec 2019": 7.00
},
{
"ResourceName": "CK",
"ProjectID": 1,
"WeekNo": 2,
"02 Dec 2019": 6.00,
"03 Dec 2019": 5.00,
"04 Dec 2019": 3.00,
"05 Dec 2019": 2.00,
"06 Dec 2019": 5.00
},
{
"ResourceName": "AH",
"ProjectID": 1,
"WeekNo": 3,
"09 Dec 2019": 6.00,
"10 Dec 2019": 7.50,
"11 Dec 2019": 7.00,
"12 Dec 2019": 7.50,
"13 Dec 2019": 8.00
},
{
"ResourceName": "CK",
"ProjectID": 1,
"WeekNo": 3,
"09 Dec 2019": 6.00,
"10 Dec 2019": 4.00,
"11 Dec 2019": null,
"12 Dec 2019": 5.00,
"13 Dec 2019": 4.00
},
{
"ResourceName": "SL",
"ProjectID": 1,
"WeekNo": 3,
"09 Dec 2019": null,
"10 Dec 2019": 1.50,
"11 Dec 2019": null,
"12 Dec 2019": 1.50,
"13 Dec 2019": 0.50
},
{
"ResourceName": "AH",
"ProjectID": 1,
"WeekNo": 4,
"16 Dec 2019": 7.00
},
{
"ResourceName": "CK",
"ProjectID": 1,
"WeekNo": 4,
"16 Dec 2019": 3.00
}
]
代碼:
static void Main(string[] args)
{
string json = File.ReadAllTextAsync("sample.json").Result;
var deserializedJson = JsonConvert.DeserializeObject<IEnumerable<IDictionary<string, string>>>(json);
foreach(var dictionary in deserializedJson)
{
Console.WriteLine(" -- Record --");
foreach(var keyValuePair in dictionary)
{
Console.WriteLine($"{keyValuePair.Key}:{keyValuePair.Value}");
}
Console.WriteLine();
}
}
輸出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.