一般来说, 正常的 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));
- }
结果如下:
如果更麻烦一点的呢?
比如我在 看到的这个 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));
- }
结果如下:
来源: https://www.cnblogs.com/sun8134/p/10801848.html