一般来说,正常的 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)); }
结果如下: