zoukankan      html  css  js  c++  java
  • 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);

     
    欢迎各位拍砖。
  • 相关阅读:
    The Hungarian algorithm Template
    用二进制方法求两个整数的最大公约数(GCD)
    <climits>头文件使用方法
    开大Stack的一个小技巧
    2014 HDU多校弟五场J题 【矩阵乘积】
    2014 HDU多校弟五场A题 【归并排序求逆序对】
    POJ 2449 求第K短路
    UVALive 6467 Strahler Order 拓扑排序
    POJ 1041 John's trip 无向图的【欧拉回路】路径输出
    Ural 1450 求最长路 SPFA
  • 原文地址:https://www.cnblogs.com/hiying/p/1401695.html
Copyright © 2011-2022 走看看