C# 初试ashx接口开发(时间处理,json处理)

来源:互联网 发布:阿里云 个人备案 编辑:程序博客网 时间:2024/06/02 00:12

以下链接有很大的启示

http://www.cnblogs.com/zfanlong1314/p/3501043.html

需求:
根据传参(参数验证)从给定的接口中获取数据(time参数),返回json格式数据
{"Data":[{"ID": xxx, "name":"pppp",
"rows":[{"2017-04-04 00:00:00":"nnn"},{"2017-04-04 01:00:00":"nnn"},{"2017-04-04 02:00:00":"nnn"}]
},
{"ID": xxxx, "name":"pppp",
"rows":[{"2017-04-04 00:00:00":"nnn"},{"2017-04-05 00:00:00":"nnn"},{"2017-04-06 00:00:00":"nnn"}]
}]}

简述步骤:
1.建立一般程序文件ashx;

1.继承于IHttpHandler;
2.自动生成的ProcessRequest(HttpContext context)方法,是入口方法;
3.context.Response.Write()方法用于输出数据,效果是会在页面上直接显示。

2.从接口中获取数据的思路;–从结果溯源

1.寻找”关键方法”;
2.从”关键方法”中获取关键的输入参数组成,如果组成是个易得到的现成方法就简单;如果不是就继续寻找:发现有参数来自整个方法体的形参,于是去寻找引用
3.在引用中发现sql语句,由于不方便在引用项目中进行调试,于是将关键代码转移到现有项目中进行调试
4.一步步溯源找到最原始的输入。
【或许有更好的方法论】

3.C# 关于时间的处理;
·关于计算时间差(C# TimeSpan 计算时间差(时间间隔))–注意:timespan.Hours统计的时间只会在24小时以内,而timespan.TotalHours单纯统计小时数。

http://www.cnblogs.com/qinpengming/p/3265579.html

        /// <summary>        /// 将时间分割成每个时间段,组合成timeList        /// </summary>        /// <param name="endTime"></param>        /// <returns></returns>        private List<string> splitTime(DateTime endTime)        {            //input:    全局变量--1.split-间隔频率;2.range-总范围            List<string> timeList = new List<string>();            int rangeDayt = int.Parse(range);            int splitHourst = int.Parse(split);            DateTime beginTime = DateTime.Now.AddDays(-rangeDayt);            TimeSpan timeSpan = endTime.Subtract(beginTime).Duration();            int d_hours = (int)Math.Floor(timeSpan.TotalHours);//获取小时差            timeList.Add(beginTime.ToString("yyyy-MM-dd HH:mm:ss"));            for (int i = splitHourst; i < d_hours; i = i + splitHourst)            {                beginTime = beginTime.AddHours(splitHourst);                timeList.Add(beginTime.ToString("yyyy-MM-dd HH:mm:ss"));            }            timeList.Add(endTime.ToString("yyyy-MM-dd HH:mm:ss"));            return timeList;        }

·关于比较时间大小–转化成DateTime进行比较

http://www.cnblogs.com/jiangnini/archive/2013/11/26/3444001.html

            #region 用tList来判断数据的时间范围            int[] recordNum = new int[tList.Count - 1];//根据时间节点定义计数器--这句话没什么意义            //初始化时间节点            for (int i = 0; i < recordNum.Length; i++)            {                data.rows.Add(tList[i], 0);            }            foreach (row r in sourceData.rows)//对其中一篇文章进行判断            {                DateTime tempDt = Convert.ToDateTime(r.updatetime);//转化为Datetime,再进行比较                string timeRecord = "";                #region 定义rows的时间                if (tempDt < Convert.ToDateTime(tList[0]))                {                    continue ;                }                for (int i = 0; i < tList.Count; i++)                {                    DateTime cdt = Convert.ToDateTime(tList[i]);                    if (i == 0)                    {                        timeRecord = tList[i];                    }                    if (tempDt > cdt)                    {                        timeRecord = tList[i];                    }                    else                    {                        break;                    }                }                #endregion                if (data.rows[timeRecord] != null)//如果存在已经定义的时间节点//关于如何从Dictionary中根据key获取value的数值                {                    data.rows[timeRecord]++;                }            }            #endregion

4.关于json数据的读取和形成;
参考这篇文章:

http://bbs.csdn.net/topics/390520967

于是:
1.引用Newtonsoft.Json.dll(这个有个很棒的优点:可以只获取可以解析的部分,这样可以屏蔽不需要的信息);
2.构建实体类;可以实现key-value的读取 & 从model-class到json数据的转换;

SourceData sourceData = Newtonsoft.Json.JsonConvert.DeserializeObject<SourceData>(str);//从json格式转化成实体类; resultJson = Newtonsoft.Json.JsonConvert.SerializeObject(resultData);//从实体类转化成json格式;

5.最后的URL访问:

http://localhost:9886/该ashx上级文件夹名称/一般应用程序名称.ashx?传参

0 0
原创粉丝点击