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 = -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实体类的定义:

    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生成实体类工具:点击>>

参考:序列化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();

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工程中用感觉有点浪费资源。
  此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式

时间: 2024-10-13 02:24:58

C#解析JSON字符串总结的相关文章

JS的全局函数eval解析JSON字符串函数

JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. 返回值 通过计算 string 得到的值(如果有的话). 说明 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回.因此请不要为 eval() 函数传递 String

jquery中解析JSON字符串的办法

data.msg传递了C#中构造的JSON字符串,使用下面两种在jquery中解析,都能正常工作 //解析返回的数据 var jsonValue = jQuery.parseJSON(data.msg); var jsonValue = eval('(' + data.msg + ')'); 附: /构造JSON字符串 string jsonStr = "{\"verifyOpinion\":\"" + temp.verifyResult + "

js jquery前台解析json字符串

一.js解析json字符串 eval()和JSON.parse() 对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,就是将该字符串放于eval()中执行一次.这种方式也适合以普通javascipt方式获取json对象,以下举例说明: var dataObj=eval("("+data+")");//转换为json对象 为什么eval这里要添加 "("+data+")&

通过Json和Gson,快速生成和解析json字符串

1,首先我们要先明白json与gson有什么区别 其实他们是完全不同的概念: json是一种数据格式,便于数据传输,存储,交换. gson则是一种组件库,就是通过Gson我们可以把java中的对象(gson.toJson()),转换成Json字符串,当然反过来也是可以的(gson.fromJson); 2,代码 首先我们需要JSon和Gson这两个jar包 package com.json.dome; import java.util.ArrayList;import java.util.Lis

Jquery解析json字符串、json数组

<!doctype html> <html> <head> <meta charset="utf-8"> <script src="../js/libs/jquery-1.6.2.min.js"></script> </head> <body> <hr /> <h3>解析json字符串.json数组</h3> <input typ

【Android进阶】Gson解析json字符串的简单应用

在客户端与服务器之间进行数据传输,一般采用两种数据格式,一种是xml,一种是json.这两种数据交换形式各有千秋,比如使用json数据格式,数据量会比较小,传输速度快,放便解析,而采用xml数据格式,如果使用SAX解析方式,则可以一边加载一边解析,对于数据量比较大的应用,比较适合.今天主要整理一下使用Gson解析json格式字符串的简单使用. 首先,必须导入外部包 /** * * @author ZhaoKaiQiang * * @time 2014年5月4日 */ public class J

SQLServer 解析JSON字符串

--------------------------------------------------- -----           解析字符串函数                ----- --------------------------------------------------- CREATE FUNCTION [dbo].[fn_split](@p_str VARCHAR(8000), @p_split VARCHAR(10)) RETURNS @tab TABLE(tid V

java多种方式解析json字符串

第一种:用net.sf.json硬解.缺点:要求字段名称和json字符串中的字段名一样,字段命名会违反驼峰规则,也不利于拓展: JSONArray jsonArray = JSONArray.fromObject(str);  JSONObject jObj = jsonArray.getJSONObject(0);  User user= (User)jObj.toBean(jObj,User.class); 第二种:用Gson解析json字符串.优点:写法简单,字段名称只要使用@Serial

java 解析JSON字符串

JAVA解析json字符串:根据城市itemName名称获取其码itemCode 1.json字符串 [{"childList":        [{"childList":            [{"childList":[],"id":374,"itemCode":"110101","itemName":"东城区","itemNam