![](/img/trans.png)
[英]Deserializing a JSON Array to a Dictionary<string, List<string>>
[英]Deserializing a JSON string formatted as a dictionary
使用C#(.Net 4.6)和JSON.NET
我目前正在嘗試反序列化以多種級別的格式呈現的大型JSON字符串-我的目標是將其中一些數據存儲在平面DB表中,通過C#類在所需的數據庫中構建數據將寫回到每一行的格式。
這是字符串格式的示例(為增加可讀性而組成的數據加上換行符):
{
"Microsoft":
{
"name" : "Microsoft",
"products" : ["Word", "Excel", ["TestThis","TestOrThis"]],
"employees" :
[
{"John" :{"name" : "John","skills" : ["Support", "Programming"]}},
{"Dave":{"name" : "Dave", "skills" : ["Tester"]}}
]
}
}
我最終想要得到的是一個數據庫行,其中僅包含部分此類信息,內容如下:
"Company Name", "Employee Name"
例如
"Microsoft", "John"
"Microsoft", "Dave"
"IBM", "Ted"
讀取基本的JSON字符串很容易,但是使用JSON是我的新手,這讓我很困惑如何進行分解。
我們可以通過首先定義幾個這樣的類來反序列化您的JSON:
class Company
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("employees")]
public List<Dictionary<string, Employee>> Employees { get; set; }
}
class Employee
{
[JsonProperty("name")]
public string Name { get; set; }
}
然后我們可以反序列化為Dictionary<string, Company>
如下所示:
var companies = JsonConvert.DeserializeObject<Dictionary<string, Company>>(json);
您會注意到,無論鍵在JSON中有何變化(例如公司名稱和員工名稱),我們都需要使用Dictionary代替靜態類。 此外,我們可以省略為我們不感興趣的項目(例如產品和技能)定義屬性的步驟。
一旦擁有反序列化的公司,我們就可以遍歷結果以達到所需的輸出,如下所示:
foreach(KeyValuePair<string, Company> kvp in companies)
{
foreach (Dictionary<string, Employee> employees in kvp.Value.Employees)
{
foreach (KeyValuePair<string, Employee> kvp2 in employees)
{
Console.WriteLine(kvp.Value.Name + ", " + kvp2.Value.Name);
}
}
}
輸出:
Microsoft, John
Microsoft, Dave
小提琴: https : //dotnetfiddle.net/FpK7AN
在您的JSON站點json2csharp.com上的通用類上,您的示例不是有效的JSON。 並將您的JSON反序列化為生成的類。 有時工具會生成錯誤的類,因此請當心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.