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);


posted @ 2011-02-07 16:03  与时俱进  阅读(802)  评论(2编辑  收藏  举报
友情链接:同里老宅院民居客栈