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();
其他写法:
int retCode = -;//返回码,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":"","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":"","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 > )
{
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实体类的定义:
public class Pictures
{
/// <summary>
/// http://i.ssimg.cn/ssupload/2016/10/17/e6500633d4cb4a918c8f45e2c71ab8f6.jpg
/// </summary>
public string PictureSrc { get; set; }
/// <summary>
///
/// </summary>
public string PictureLink { get; set; }
/// <summary>
/// 中色股份 53%
/// </summary>
public string PictureAlt { get; set; }
/// <summary>
/// 四季度翻倍牛股在哪里?
/// </summary>
public string PictureTitle { get; set; }
/// <summary>
/// meihaoxiangwang
/// </summary>
public string PictureTitleLink { get; set; }
/// <summary>
/// 荷塘月色直播室是由野马和荷塘月色夫妻俩共同直播的直播室,野马以短线股为主, 荷塘月色以中线股为主,擅于抓涨停板和翻倍牛股。
/// </summary>
public string PictureSummary { get; set; } /// <summary>
/// 股票名称
/// </summary>
public string StockName { get; set; } /// <summary>
/// 股票收益率
/// </summary>
public string Rate { get; set; } /// <summary>
/// 昵称
/// </summary>
public string NickName { get; set; } /// <summary>
/// 头像
/// </summary>
public string HeadImg { get; set; } /// <summary>
/// 直播室名称
/// </summary>
public string CastRoomName { get; set; } }
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[]["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工程中用感觉有点浪费资源。
此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式。
备注:
json格式字符串转换为实体类,大括号{}表示对象,[]数组表示列表。
更多阅读:
C#解析JSON字符串总结的更多相关文章
- 使用 dynamic 标记解析JSON字符串 JDynamic :支持Json反序列化为Dynamic对象
使用 dynamic 标记解析JSON字符串 http://www.cnblogs.com/taotaodetuer/p/4171327.html 1 string jsonStr = " ...
- json解析json字符串时候,数组必须对应jsonObjectArray,不能对应JsonObject。否则会解析错误。
json第三方解析json字符串时候,json数组必须对应jsonObjectArray,不能对应JsonObject.->只要是[]开头的都是json数组字符串,就要用jsonArray解析 ...
- Json转model对象,model转json,解析json字符串
GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...
- 解析Json字符串的三种方法
在很多时候,我们的需要将类似 json 格式的字符串数据转为json, 下面将介绍日常中使用的三种解析json字符串的方法 1.首先,我们先看一下什么是 json 格式字符串数据,很简单,就是 jso ...
- Java解析json字符串和json数组
Java解析json字符串和json数组 public static Map<String, String> getUploadTransactions(String json){ Map ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- C#解析JSON字符串总结(转载)
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- java解析Json字符串之懒人大法
面对Java解析Json字符串的需求,有很多开源工具供我们选择,如google的Gson.阿里巴巴的fastJson.在网上能找到大量的文章讲解这些工具的使用方法.我也是参考这些文章封装了自己的Jso ...
- JS的全局函数eval解析JSON字符串
JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需. ...
随机推荐
- DELPHI SOKET 编程(使用TServerSocket和TClientSocket) 转
http://www.cnblogs.com/findumars/p/5272658.html 本文采用delphi7+TServerSocket+TClientSocket; 笔者在工作中遇到对 ...
- x86_64平台编译链接汇编程序
assemble: nasm -f elf32 sample.asm -l sample.lst link: ld -m elf_i386 -o test sample.o io.o
- 利用canvas实现的中点Bresenham算法
Bresenham提出的直线生成算法的基本原理是,每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别,具体的实现过程大家可以去问度娘.我主要是利用canvas画布技术实现了这个 ...
- Unity Shader:Blur
花了一晚上的时间终于看懂Image Effect中的Blur,其实很简单,就是一下子没有理解到. 原理:使用两个一维[1*7]的高斯滤波模板,一个用在x方向,另一个用在y方向.高斯滤波有模糊的效果. ...
- 翻译「C++ Rvalue References Explained」C++右值引用详解 Part5:右值引用就是右值吗?
本文为第五部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/cpp-rvalue-references-explained-introduction.ht ...
- Centos7 Openstack - (第一节)基本环境配置
Centos7 install Openstack - (第一节)基本环境配置 我的blog地址:http://www.cnblogs.com/caoguo 根据openstack官方文档配置 官方文 ...
- ios 获取通讯录的所有信息
iOS获取通讯录全部信息 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef results = ABAddressBoo ...
- 静态库制作.a .framework
一.静态库 .a 制作 1.新建一个Cocoa Touch Static Library 2.往里面添加文件,或者自己新建 3.添加一个Headers Phase ...
- 关于 mysql 2003 客户端连接报错的处理方法
在连接到 mysql 数据库服务器时,有时会在客户端报出 2003 的错误代码,并提示: 无法连接到服务器,但服务器却可以 ping 通,可能的原因如下: 1.网络不通.检查能不能ping通. 2.防 ...
- 学习总结 html图片热点,网页划区,拼接,表单
表单: action="负责处理的 <form id="" name="" method="post/get"服务端&quo ...