项目中我们经常遇到一些经常访问的接口,并且更新及时度不是特别高,那么我们可以利用文件来做一些数据请求的缓存。

这里以微信公众号获取粉丝用户列表为例,我们把微信公众号查到的用户先缓存在文件中,这样在翻页时就不需要再重新请求接口。

获取微信粉丝用户

/// <summary>
/// 用户列表
/// </summary>
/// <returns></returns>
public ActionResult UserList()
{
//页面加载时,将微信拉去用户进行缓存
List<wx_user_info> Users = new List<wx_user_info>();
var OpenList = new WeChat().GetOpenIdList();
if (OpenList.ResponseState)
{
foreach (var item in OpenList.ResponseData.data.openid)
{
var backdata = new WeChat().GetUserInfo(item);
if (backdata.ResponseState)
{
Users.Add(backdata.ResponseData);
}
}
var jser = new JavaScriptSerializer();
var json = jser.Serialize(Users.ToArray());
string sRespons = json.ToString(); byte[] byt = System.Text.Encoding.UTF8.GetBytes(sRespons);
FileStream fs = new FileStream(Server.MapPath("~/App_Data/Config/weixin.json"), FileMode.OpenOrCreate);
fs.Write(byt, , byt.Length);
fs.Dispose();
fs.Close();
}
else
{
ViewBag.Tip = "系统异常,编号:" + OpenList.ErrorData.errcode + "错误信息:" + OpenList.ErrorData.errmsg;
}
return View();
}

用户翻页时异步从json文件获取指定条数数据

public ActionResult GetUserList(int? page, int? take)
{
page = page ?? ;
take = take ?? ; List<wx_user_info> Users = new List<wx_user_info>();
FileStream fs = new FileStream(Server.MapPath("~/App_Data/Config/weixin.json"), FileMode.Open);
byte[] byt = new byte[fs.Length];
fs.Read(byt, , byt.Length);
Users = JsonConvert.DeserializeObject<List<wx_user_info>>(Encoding.UTF8.GetString(byt));
fs.Dispose();
fs.Close();
ViewBag.Tip = Users.Count() + "人"; ViewBag.TotalPage = Math.Ceiling(((double)Users.Count() / (double)take));
ViewBag.CurrentPage = page; var PageUseras = Users.Where(ua => true);
//条件查询
if (!string.IsNullOrWhiteSpace(Request.Form["search_nickname"]))
{
PageUseras = Users.Where(ua => ua.nickname.Contains(Request.Form["search_nickname"]) || ua.remark.Contains(Request.Form["search_nickname"]));
ViewBag.TotalPage = Math.Ceiling(((double)PageUseras.Count() / (double)take));
ViewBag.CurrentPage = page = ;
} //如果本页没有数据直接显示前一页
if (page > && PageUseras.Skip(take.Value * (page.Value - )).Take(take.Value).Count() < )
{
ViewBag.CurrentPage = Math.Ceiling(((double)PageUseras.Count() / (double)take));
PageUseras = PageUseras.Skip(take.Value * (page.Value - )).Take(take.Value);
}
else
{
PageUseras = PageUseras.Skip(take.Value * (page.Value - )).Take(take.Value);
}
return View(PageUseras);
}

JsonResult序列化并保存json文件 以及对json文件读取反序列的更多相关文章

  1. 保存数据到文件的模块(json,pickle,shelve,configparser,xml)_python

    一.各模块的主要功能区别 json模块:将数据对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文.  (与其他大多语言交互的类型) pickle模块:将数据对象从内存中完成序列 ...

  2. IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值

    json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在you ...

  3. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据

    前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...

  4. (Python )格式化输出、文件操作、json

    本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...

  5. python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)

    昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...

  6. Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件

    一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...

  7. 常用文件操作模块json,pickle、shelve和XML

    一.json 和 pickle模块 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Js ...

  8. 一.文件处理和json模块(容易混淆知识点即用法)

    一.文件处理 注意点1: 打开文件包含两部分资源:操作系统级打开得文件+应用程序的变量. 在操作完毕一个文件时,必须把该文件的两部分资源一个不落的回收 如下: f.close() #回收操作系统级打开 ...

  9. plist文件、NSUserDefault 对文件进行存储的类、json格式解析

    ========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...

随机推荐

  1. 转AjaxControlToolkit的安装与使用详解

    AjaxControlToolkit的安装与使用详解 AjaxControlToolkit下载http://ajax.asp.net/downloads/default.aspx?tabid=47ht ...

  2. centos下整合PagerDuty、nagios初探(on-call尝鲜和体验)

    [前言] 今天在某个群里看见有人介绍了PagerDuty,介绍到了slack.整合后可以更加方便和团队合作.于是我觉得来尝尝鲜. [PagerDuty是什么?] PagerDuty是一款能够在服务器出 ...

  3. ListView在列表的头部和底部添加布局——addHeaderView,addFooterView

    addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 以addHeaderView为例: View he ...

  4. IIS7配置asp网站

    An error occurred on the server when processing the URL. Please contact the system administrator. If ...

  5. Java 设计模式泛谈&装饰者模式和单例模式

    设计模式(Design Pattern) 1.是一套被反复使用.多人知晓的,经过分类编目 的 代码设计经验总结.使用设计模式是为了可重用代码,让代码更容易维护以及扩展. 2.简单的讲:所谓模式就是得到 ...

  6. python基础教程-第二章-列表和元组

    本章将引入一个新的概念,:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在python中,最基本的数据结构 ...

  7. bzoj 2875: [Noi2012]随机数生成器

    #include<cstdio> #include<iostream> #include<cstring> #define ll long long using n ...

  8. Linux摄像头驱动学习之:(三)从零写虚拟驱动(仿照vivi.c)

    本篇仿照vivi.c 写虚拟视频驱动,代码(myvivi.c+fillbuf.c+Makefile)如下: //==========================myvivi.c========== ...

  9. 关于jquery中的事件绑定bind()和live()

    live可以说是bind是方法的变种. 二者的主要区别就是live方法的作用机理是事件委托,live方法的作用机理是将事件绑定DOM的根节点上. live方法的处理机制就是把事件绑定在DOM树的根节点 ...

  10. Java类与对象——几个课堂例子的总结及作业

    作业:使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 源代码: import java.util.Scanner; ...