zoukankan      html  css  js  c++  java
  • asp.net(C#)解析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);
    详细出处参考:http://www.jb51.net/article/21540.htm

  • 相关阅读:
    038 Count and Say 数数并说
    037 Sudoku Solver 解数独
    036 Valid Sudoku 有效的数独
    035 Search Insert Position 搜索插入位置
    bzoj1202 [HNOI2005]狡猾的商人
    USACO45 lights 电灯(折半搜索)
    USACO44 TimeTravel 时间旅行(链表)
    USACO35 翻转奶牛(尺取法)
    bzoj1833: [ZJOI2010]count 数字计数&&USACO37 Cow Queueing 数数的梦(数位DP)
    USACO26 moofest 奶牛集会(归并排序)
  • 原文地址:https://www.cnblogs.com/JensonBin/p/2773712.html
Copyright © 2011-2022 走看看