内容简介:JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。操作JSON通常有以下几种方式:首先添加引用:using Newtonsoft.Json;
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。
操作JSON通常有以下几种方式:
-
原始方式:按照JSON字符串自己来解析。
-
通用方式【★★★★★】:这种方式是使用开源的类库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();
其他写法:
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生成实体类工具:点击>>
参考:序列化Json-Newtonsoft.Json
解析JsonArrayList
转换json格式为C#类
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();
复制代码
- 内置方式:使用.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,则要求当前的工程的 TargetFramework要改成.Net Framework 4,不能使用Client Profile。当然这个System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感觉有点浪费资源。 此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 查找一个字符串中最长不含重复字符的子字符串,计算该最长子字符串的长度
- 字符串、字符处理总结
- 高频算法面试题(字符串)leetcode 387. 字符串中的第一个唯一字符
- php删除字符串最后一个字符
- (三)C语言之字符串与字符串函数
- 算法笔记字符串处理问题H:编排字符串(2064)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解C#(第3版)
斯基特 (Jon Skeet) / 姚琪琳 / 人民邮电出版社 / 2014-4-1 / 99.00元
本书是世界顶级技术专家“十年磨一剑”的经典之作,在C#和.NET领域享有盛誉。与其他泛泛介绍C#的书籍不同,本书深度探究C#的特性,并结合技术发展,引领读者深入C#的时空。作者从语言设计的动机出发,介绍支持这些特性的核心概念。作者将新的语言特性放在C#语言发展的背景之上,用极富实际意义的示例,向读者展示编写代码和设计解决方案的最佳方式。同时作者将多年的C#开发经验与读者分享,读者可咀其精华、免走弯......一起来看看 《深入理解C#(第3版)》 这本书的介绍吧!