您的位置:首页 > Web前端 > JavaScript

C#解析Json的类

2009-09-06 16:48 323 查看
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"

}

]}

}

}

解析的类:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Data;

usingSystem.Web.Script.Serialization;

namespaceTencent.Itil.Cmsi.Common

{

publicclassGeneralSearchResult

{

publicHeaderheader=newHeader();

privateDataTablefieldDefine=newDataTable();

///<summary>

///
返回的数据结构定义,无数据

///</summary>

publicDataTableFieldDefine

{

get{returnfieldDefine;}

set{fieldDefine=value;}

}

privateDataTableretrunData=newDataTable();

///<summary>

///
返回的数据,格式为
DataTable
,结构和
FieldDefine
中的结构一样

///</summary>

publicDataTableRetrunData

{

get{returnretrunData;}

set{retrunData=value;}

}

///<summary>

///

json
数据转换为定义好的对象,数据转换为
DataTable

///</summary>

///<paramname="jsonText"></param>

///<returns></returns>

publicstaticGeneralSearchResultGetTransformData(stringjsonText)

{

GeneralSearchResultgsr=newGeneralSearchResult();

JavaScriptSerializers=newJavaScriptSerializer();

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>ssindicFieldDefine)

{

gsr.FieldDefine.Columns.Add(ss.Key,typeof(string));

}

gsr.RetrunData=gsr.FieldDefine.Clone();

foreach(objectobinrows)

{

Dictionary<string,object>val=(Dictionary<string,object>)ob;

DataRowdr=gsr.RetrunData.NewRow();

foreach(KeyValuePair<string,object>sssinval)

{

dr[sss.Key]=sss.Value;

}

gsr.RetrunData.Rows.Add(dr);

}

returngsr;

}

///<summary>

///
数据文件头定义

///</summary>

publicclassHeader

{

privatestringversion;

///<summary>

///
版本

///</summary>

publicstringVersion

{

get{returnversion;}

set{version=value;}

}

privatestringreturnCode;

///<summary>

///
结果码,
0
为正常,否则为有错误

///</summary>

publicstringReturnCode

{

get{returnreturnCode;}

set{returnCode=value;}

}

privatestringerrorInfo;

///<summary>

///
如果
ReturnCode
为非
0
时的错误信息

///</summary>

publicstringErrorInfo

{

get{returnerrorInfo;}

set{errorInfo=value;}

}

privateinttotalRows;

///<summary>

///
查询结果总行数

///</summary>

publicintTotalRows

{

get{returntotalRows;}

set{totalRows=value;}

}

privateintreturnRows;

///<summary>

///
返回的数据行数

///</summary>

publicintReturnRows

{

get{returnreturnRows;}

set{returnRows=value;}

}

}

}

}

使用方法:

GeneralSearchResultgsr=newGeneralSearchResult(); gsr=GeneralSearchResult.GetTransformData(text);


欢迎各位拍砖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: