日期:2014-05-16 浏览次数:20427 次
网上转的,自己没测试过。大家有好的方法请跟帖共享,最好是要自己测试过的。
?
现在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> /// 版本