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

时间:2022-04-11 16:49:03
本次工作内容是要将以下数据解析成.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);