C# 解析JSON字符串

JSON文件讀取到內存中就是字符串,.NET操做JSON就是生成與解析JSON字符串。html

操做JSON一般有如下幾種方式:json

1. 原始方式:按照JSON字符串本身來解析。數組

2. 通用方式【★★★★★】:這種方式是使用開源的類庫Newtonsoft.Json,使用NuGet進行引用工具

 

 

1.Json字符串普通格式解析(經常使用)post

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的返回的數據:url

{"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"}
]
}

解析成自定義實體類列表:spa

#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生成實體類工具:點擊>>3d

 

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

 

        /// <summary>
        /// 將JSON轉字符串(包括數組)轉爲T
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="json"></param>
        /// <returns></returns>
        public static T JsonConvertObject<T>(string json)
        {
            return JsonConvert.DeserializeObject<T>(json);
        }

 

備註:

json格式字符串轉換爲實體類,大括號{}表示對象,[]數組表示列表。

 

原文連接

相關文章
相關標籤/搜索