C#解析Json的类{经典}【转】

本文转帖地址:http://www.cnblogs.com/hiying/archive/2009/03/02/1401695.html ,在本人急需时帮了大忙,谢谢原作者!

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jingshuaizh/archive/2009/12/14/5004418.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值