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

以下链接有很大的启示

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值