asp.net(C#)解析Json的类代码

 更新时间:2009年12月22日 22:19:53   作者:   我要评论
现在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);

相关文章

  • ASP.NET批量下载文件的方法

    ASP.NET批量下载文件的方法

    这篇文章主要介绍了ASP.NET批量下载文件的方法,实例汇总了常见的asp.net实现批量下载的方法,具有一定的实用价值,需要的朋友可以参考下
    2014-11-11
  • asp.NET中实现文件的压缩和解压(3种方式)

    asp.NET中实现文件的压缩和解压(3种方式)

    本篇文章主要介绍了asp.NET中实现文件的压缩和解压,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2016-11-11
  • ASP.NET数据绑定控件详解

    ASP.NET数据绑定控件详解

    这篇文章主要为大家详细介绍了ASP.NET数据绑定控件,为大家解析了ListBox、GridView、Repeater三个数据绑定控件的“高效分页”,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • asp.NET 脏字过滤算法 修改版

    asp.NET 脏字过滤算法 修改版

    我们网站的脏字字典中大概有600多个词,而且会发生变化,因此简单的在数据新增/修改的时候做一次脏字过滤是不够的。在网站从.NET 1.1到2.0改版的时候,对新版的测试发现旧的脏字过滤算法耗费的时间过长,需要做一些优化。
    2009-10-10
  • asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验)

    asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功

    其实这个已经是个比较常见的功能了,网上也有很多人做过这个了,但是很多都是仅仅做了一些基本的网页上自动完成功能,没有与具体的金沙国际官网进行联动,我今天所介绍这个自动完成的就是我修改的jQuery.AutoComplete+金沙国际官网的一个解决方案。
    2010-05-05
  • ASP.NET 图片加水印防盗链实现代码

    ASP.NET 图片加水印防盗链实现代码

    ASP.NET 图片加水印防盗链实现代码,需要的朋友可以参考下。
    2011-12-12
  • .NetCore实现上传多文件的示例详解

    .NetCore实现上传多文件的示例详解

    本章和大家分享的是.NetCore的MVC框架上传文件的示例,主要讲的内容有:form方式提交上传,ajax上传,ajax提交+上传进度效果,Task并行处理+ajax提交+上传进度,对大家非常有帮助,感兴趣的朋友跟随小编一起学习吧
    2017-04-04
  • 在DataTable中执行Select("条件")后,返回DataTable的方法

    在DataTable中执行Select("条件")后,返回DataTable的

    在DataTable中执行Select("条件")后,返回DataTable的方法...
    2007-09-09
  • asp.net中通过DropDownList的值去控制TextBox是否可编写的实现代码

    asp.net中通过DropDownList的值去控制TextBox是否可编写的实现代

    Web窗体上有两控件,DropDownList1,TextBox1,当DropDownList的值选择是YES的时候,TextBox1可编辑,当选择NO的时候,TextBox1的值为空,并且不能编辑,该如何实现
    2012-11-11
  • 浅谈Asp.Net母版页的相关知识

    浅谈Asp.Net母版页的相关知识

    母版页的使用与普通页面类似,可以在其中放置文件或者图形、任何的HTML控件和Web控件,后置代码等,这篇文章主要介绍了浅谈Asp.Net母版页的相关知识,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论