好久没写东西了,又开始写代码。今天写了点东西记下来:
现在json因为轻型,越来越流行,部门内部的数据标准趋向于json,所以开始学习。
本次工作内容是要将以下数据解析成.Net可以使用的数据,返回的数据除了header,其他的都是可变的,也就是说结构不是固定的。完全由用户选择,所以选择了生成DataTable。
Json数据格式如下:
{"dataSet":{ |
解析的类:
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); |