首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

C#解析Json的种

2012-12-27 
C#解析Json的类网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己测试过的。?现在json因为轻型

C#解析Json的类

网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己测试过的。

?

现在json因为轻型,越来越流行,部门内部的数据标准趋向于json,所以开始学习。

本次工作内容是要将以下数据解析成.Net可以使用的数据,返回的数据除了header,其他的都是可变的,也就是说结构不是固定的。完全由用户选择,所以选择了生成DataTable。

Json数据格式如下:

?

{"dataSet":{"header":{    "returnCode":"0",    "errorInfo":"HTTP请求错误",    "version":"V1.0R010",    "totalRows":"2000",    "returnRows":"20"},"fieldDefine":{    "assetId":"string",    "serverIdcId":"int",    "inputTime":"datetime"},"data":{"row":[{    "AssetId":"TCNS2006888",    "ServerIdcId":"1",    "InputTime":"2008-12-12"},{    "AssetId":"TCNS2006889",    "ServerIdcId":"2",    "InputTime":"2008-1-1"}]}}}

?

?

解析的类:

using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Web.Script.Serialization;namespace Tencent.Itil.Cmsi.Common{    public class GeneralSearchResult    {        public Header header = new Header();        private DataTable fieldDefine = new DataTable();        /// <summary>        /// 返回的数据结构定义,无数据        /// </summary>        public DataTable FieldDefine        {            get { return fieldDefine; }            set { fieldDefine = value; }        }        private DataTable retrunData = new DataTable();        /// <summary>        /// 返回的数据,格式为DataTable,结构和FieldDefine中的结构一样        /// </summary>        public DataTable RetrunData        {            get { return retrunData; }            set { retrunData = value; }        }        /// <summary>        /// 将json数据转换为定义好的对象,数据转换为DataTable        /// </summary>        /// <param name="jsonText"></param>        /// <returns></returns>        public static GeneralSearchResult GetTransformData(string jsonText)        {            GeneralSearchResult gsr = new GeneralSearchResult();            JavaScriptSerializer s = new JavaScriptSerializer();            Dictionary<string, object> JsonData = (Dictionary<string, object>)s.DeserializeObject(jsonText);            Dictionary<string, object> dataSet = (Dictionary<string, object>)JsonData["dataSet"];            Dictionary<string, object> header = (Dictionary<string, object>)dataSet["header"];            Dictionary<string, object> fieldDefine = (Dictionary<string, object>)dataSet["header"];            Dictionary<string, object> data = (Dictionary<string, object>)dataSet["data"];            object[] rows = (object[])data["row"];            gsr.header.Version = header["version"].ToString();            gsr.header.ErrorInfo = header["errorInfo"].ToString();            gsr.header.ReturnCode = header["returnCode"].ToString();            gsr.header.ReturnRows = Convert.ToInt16(header["returnRows"]);            gsr.header.TotalRows = Convert.ToInt16(header["totalRows"]);            Dictionary<string, object> dicFieldDefine = (Dictionary<string, object>)dataSet["fieldDefine"];            foreach (KeyValuePair<string, object> ss in dicFieldDefine)            {                gsr.FieldDefine.Columns.Add(ss.Key, typeof(string));            }            gsr.RetrunData = gsr.FieldDefine.Clone();            foreach (object ob in rows)            {                Dictionary<string, object> val = (Dictionary<string, object>)ob;                DataRow dr = gsr.RetrunData.NewRow();                foreach (KeyValuePair<string, object> sss in val)                {                    dr[sss.Key] = sss.Value;                }                gsr.RetrunData.Rows.Add(dr);            }            return gsr;        }        /// <summary>        /// 数据文件头定义        /// </summary>        public class Header        {            private string version;            /// <summary>            /// 版本            /// </summary>            public string Version            {                get { return version; }                set { version = value; }            }            private string returnCode;            /// <summary>            /// 结果码,0为正常,否则为有错误            /// </summary>            public string ReturnCode            {                get { return returnCode; }                set { returnCode = value; }            }            private string errorInfo;            /// <summary>            /// 如果ReturnCode为非0时的错误信息            /// </summary>            public string ErrorInfo            {                get { return errorInfo; }                set { errorInfo = value; }            }            private int totalRows;            /// <summary>            /// 查询结果总行数            /// </summary>            public int TotalRows            {                get { return totalRows; }                set { totalRows = value; }            }            private int returnRows;            /// <summary>            /// 返回的数据行数            /// </summary>            public int ReturnRows            {                get { return returnRows; }                set { returnRows = value; }            }        }    }}
?

?

使用方法:

GeneralSearchResult gsr = new GeneralSearchResult();            gsr = GeneralSearchResult.GetTransformData(text); 
?

?

热点排行