C#解析JSON字符串总结
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。
操作JSON通常有以下几种方式:
1. 原始方式:按照JSON字符串自己来解析。
2. 通用方式【★★★★★】:这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。
首先添加引用:using Newtonsoft.Json;
新增:本地dll下载:Newtonsoft.Json.rar 引用:using Newtonsoft.Json;
1.Json字符串普通格式解析(常用)
string jsonText = "{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}"; JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText); string zone = jo["zone"].ToString(); string zone_en = jo["zone_en"].ToString();
其他写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int retCode = -1; //返回码,0表示成功,其他表示失败 string returnMessage = string .Empty; //返回消息,对返回码的描述 string jsonStr = "{\"RetCode\":3,\"ReturnMessage\":\"测试消息\"}" ; JavaScriptObject jsonObj = JavaScriptConvert.DeserializeObject<JavaScriptObject>(jsonStr); if (jsonObj != null ) { if (jsonObj.ContainsKey( "RetCode" ) && jsonObj[ "RetCode" ] != null ) { int .TryParse(jsonObj[ "RetCode" ].ToString(), out retCode); } if (jsonObj.ContainsKey( "ReturnMessage" ) && jsonObj[ "ReturnMessage" ] != null ) { returnMessage = jsonObj[ "ReturnMessage" ].ToString(); } } |
解析Josn列表数据:
public static JArray GetData2JArray(string url, string key) { string jsonData = HttpHelper.HttpGet(url, "", "gb2312"); JObject obj = JObject.Parse(jsonData); return (JArray)obj[key]; }
以上Json的返回的数据:
{"Pictures": [ {"PictureSrc":"http://i.ssimg.cn/ssupload/2016/10/17/707f464645f44b4cb9882b75d23ed8f9.png","PictureLink":"","PictureAlt":"通光线缆 36.50%","PictureTitle":"实盘赛冠军直播室","PictureTitleLink":"132","PictureSummary":"荷塘月色直播室是由野马和荷塘月色夫妻俩共同直播的直播室,野马以短线股为主,荷塘月色以中线股为主,擅于抓涨停板和翻倍牛股。","OrderTime":"2016-10-17 13:16:04"}, {"PictureSrc":"http://i.ssimg.cn/ssupload/2016/10/17/4c38b0a2604e49beaf1e4f7885e6a1a4.png","PictureLink":"","PictureAlt":"天际股份 6.38%","PictureTitle":"证券之星最强王牌播主","PictureTitleLink":"1716","PictureSummary":"深入股海数年,拥有十余年的实战经验。2014年证券之星播主年度冠军,各大一线网站著名博客,多次接受电视台专访。","OrderTime":"2016-10-17 13:12:34"} ] }
解析成自定义实体类列表:
#region 获取手编列表 /// <summary> /// 获取手编列表 /// </summary> /// <returns></returns> public static List<Pictures> GetHandWriteList() { List<Pictures> list = new List<Pictures>(); var data = Common.LiveCastUserManageAPI.GetData2JArray(CmsApiSite, "Pictures"); if (data != null && data.Count > 0) { foreach (var item in data) { Pictures p = new Pictures(); if (!string.IsNullOrEmpty(item["PictureSrc"].ToString())) { p.PictureSrc = item["PictureSrc"].ToString(); } list.Add(p); } } return list; } #endregion
Pictures实体类的定义:

JSON生成实体类工具:点击>>
解析JsonArrayList
2.Json字符串嵌套格式解析
string jsonText = "{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}"; JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText); string zone = jo["beijing"]["zone"].ToString(); string zone_en = jo["beijing"]["zone_en"].ToString();
3.Json字符串数组格式解析
string jsonArrayText = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]"; //"[{'a':'a1','b':'b1'}]即使只有一个元素,也需要加上[] string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; //上面写法和此写法效果一样 JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);//jsonArrayText必须是带[]数组格式字符串 string str = jArray[0]["a"].ToString();
3. 内置方式:使用.NET Framework 3.5/4.0中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化,很直接。
Project p1 = new Project() { Input = "stone", Output = "gold" }; JavaScriptSerializer serializer = new JavaScriptSerializer(); string jsonStr = serializer.Serialize(p1); //序列化:对象=>JSON字符串 Response.Write(jsonStr); Project p2 = serializer.Deserialize<Project>(jsonStr); //反序列化:JSON字符串=>对象 Response.Write(p1.Input + "=>" + p2.Output);
注意:如果使用的是VS2010,则要求当前的工程的 Target Framework要改成.Net Framework 4,不能使用Client Profile。当然这个System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感觉有点浪费资源。
此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式。
转自:https://www.cnblogs.com/zxtceq/p/6610214.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!