一般來說,正常的 json 長這個模樣:
{
'Name': 'Bad Boys',
'ReleaseDate': '1995-4-7T00:00:00',
'Genres': [
'Action',
'Comedy'
]
}
這個時候我們只需要建立對應的類,直接反序列化就行(比如宇宙第一VS的 “編輯” -- “選擇性粘貼” -- “將JSON粘貼為類”)
public class Movie { public string Name { get; set; } public string ReleaseDate { get; set; } public string[] Genres { get; set; } } Movie m = JsonConvert.DeserializeObject<Movie>(json);
不過有的時候會有些不負責任的 JSON
有時候它長這樣:
{
"mapping": [{
"PHARMACOLOGY": "TU",
"NEUROSCIENCES": "RU"
}]
}
有時候它還長這樣:
{
"mapping": [{
"TELECOMMUNICATIONS": "YE"
}]
}
這個時候序列化我們就需要 字典 (Dictionary)
這個時候我們的類要長這樣:
public class Rootobject { public List<Dictionary<string, string>> mapping { get; set; } }
然后照常反序列化:
Rootobject root = JsonConvert.DeserializeObject<Rootobject>(JSON);
循環下輸出結果:
i++;
foreach (var temp in root.mapping[0])
{
Console.WriteLine(String.Format("Number:{0},Keys:{1},Values:{2}", i, temp.Key, temp.Value));
}
結果如下:
如果更麻煩一點的呢?
比如我在 https://blog.csdn.net/jdsjlzx/article/details/76785239 看到的這個json:
{
"resultcode": "200",
"reason": "successed!",
"result": {
"sk": {
"temp": "24",
"wind_direction": "東北風",
"wind_strength": "2級",
"humidity": "28%",
"time": "17:38"
},
"today": {
"temperature": "15℃~26℃",
"weather": "多雲轉晴",
"wind": "東北風微風",
"week": "星期日",
"city": "桂林",
"date_y": "2015年10月11日",
"dressing_index": "舒適",
"dressing_advice": "建議着長袖T恤、襯衫加單褲等服裝。年老體弱者宜着針織長袖襯衫、馬甲和長褲。",
"uv_index": "弱",
"comfort_index": "",
"wash_index": "較適宜",
"travel_index": "較適宜",
"exercise_index": "較適宜",
"drying_index": ""
},
"future": {
"day_20151011": {
"temperature": "15℃~26℃",
"weather": "多雲轉晴",
"wind": "東北風微風",
"week": "星期日",
"date": "20151011"
},
"day_20151012": {
"temperature": "16℃~27℃",
"weather": "晴轉多雲",
"wind": "微風",
"week": "星期一",
"date": "20151012"
},
"day_20151013": {
"temperature": "16℃~26℃",
"weather": "多雲轉晴",
"wind": "微風",
"week": "星期二",
"date": "20151013"
},
"day_20151014": {
"temperature": "17℃~27℃",
"weather": "晴",
"wind": "北風微風",
"week": "星期三",
"date": "20151014"
},
"day_20151015": {
"temperature": "17℃~28℃",
"weather": "晴",
"wind": "北風微風",
"week": "星期四",
"date": "20151015"
},
"day_20151016": {
"temperature": "17℃~30℃",
"weather": "晴",
"wind": "北風微風",
"week": "星期五",
"date": "20151016"
},
"day_20151017": {
"temperature": "17℃~30℃",
"weather": "晴",
"wind": "北風微風",
"week": "星期六",
"date": "20151017"
}
}
},
"error_code": 0
}
繼續使用 Dictionary 定義類:
public class WeatherRootobject { public string resultcode { get; set; } public string reason { get; set; } public Result result { get; set; } public int error_code { get; set; } } public class Result { public Sk sk { get; set; } public Today today { get; set; } public Dictionary<string, Weather> future { get; set; } } public class Sk { public string temp { get; set; } public string wind_direction { get; set; } public string wind_strength { get; set; } public string humidity { get; set; } public string time { get; set; } } public class Today { public string temperature { get; set; } public string weather { get; set; } public string wind { get; set; } public string week { get; set; } public string city { get; set; } public string date_y { get; set; } public string dressing_index { get; set; } public string dressing_advice { get; set; } public string uv_index { get; set; } public string comfort_index { get; set; } public string wash_index { get; set; } public string travel_index { get; set; } public string exercise_index { get; set; } public string drying_index { get; set; } } public class Weather { public string temperature { get; set; } public string weather { get; set; } public string wind { get; set; } public string week { get; set; } public string date { get; set; } }
然后反序列化輸出:
WeatherRootobject weathers = JsonConvert.DeserializeObject<WeatherRootobject>(json);
foreach (var temp in weathers.result.future)
{
Console.WriteLine(String.Format("Day:{0},Week:{1},Temperature:{2}", temp.Key, temp.Value.week, temp.Value.temperature));
}
結果如下:


