JsonResult序列化并保存json文件 以及对json文件读取反序列
项目中我们经常遇到一些经常访问的接口,并且更新及时度不是特别高,那么我们可以利用文件来做一些数据请求的缓存。
这里以微信公众号获取粉丝用户列表为例,我们把微信公众号查到的用户先缓存在文件中,这样在翻页时就不需要再重新请求接口。
获取微信粉丝用户
/// <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文件读取反序列的更多相关文章
- 保存数据到文件的模块(json,pickle,shelve,configparser,xml)_python
一.各模块的主要功能区别 json模块:将数据对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文. (与其他大多语言交互的类型) pickle模块:将数据对象从内存中完成序列 ...
- IT项目中使用 json格式数据 保存项目配置信息, 在配置文件再读取json文件的内容进行赋值
json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在you ...
- Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据
前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...
- (Python )格式化输出、文件操作、json
本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...
- python 全栈开发,Day75(Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件)
昨日内容回顾 基于对象的跨表查询 正向查询:关联属性在A表中,所以A对象找关联B表数据,正向查询 反向查询:关联属性在A表中,所以B对象找A对象,反向查询 一对多: 按字段:xx book ----- ...
- Django与Ajax,文件上传,ajax发送json数据,基于Ajax的文件上传,SweetAlert插件
一.Django与Ajax AJAX准备知识:JSON 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻 ...
- 常用文件操作模块json,pickle、shelve和XML
一.json 和 pickle模块 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Js ...
- 一.文件处理和json模块(容易混淆知识点即用法)
一.文件处理 注意点1: 打开文件包含两部分资源:操作系统级打开得文件+应用程序的变量. 在操作完毕一个文件时,必须把该文件的两部分资源一个不落的回收 如下: f.close() #回收操作系统级打开 ...
- plist文件、NSUserDefault 对文件进行存储的类、json格式解析
========================== 文件操作 ========================== Δ一 .plist文件 .plist文件是一个属性字典数组的一个文件: .plis ...
随机推荐
- 6/8/9/10/11 Sprint2 看板和燃尽图
端午放假,大家都回家了 页面模块的大体设计,因所找的资料不全,还待改善
- C++中 接口的定义 COM
首先定义一个虚基类的接口,其中包含虚函数AddRef Release QueryInterface,(MFC 类IUnKnown unknwn.h)分别是增加减去引用计数和查询接口然后定义一个实现类, ...
- Project中分清楚挣值项
在项目管理非常重要的挣值管理,有一些关键项,像PV,EV,AC,BAC,EAC,ETC等等这些都是关键项,如果这个没分清楚,计算出很多东西都是错的,下面两个图是我一个项目快要完成的报表. 图1 图2 ...
- $.getJSON( )的使用方法简介
JSON(JavaScript Object Notation)即JavaScript对象表示法,是一种轻量级的数据交换格式.它非常便于编程人员对数据的处理,也便于机器对数据的解析和生成,应用非常广泛 ...
- jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www-form-urlencoded; text/html; charset=UTF-8'
tcpflow以流为单位分析请求内容,非常适合服务器端接口类服务查问题 这次遇到的问题跟支付宝支付后的回调post结果有关 淘宝的代码例子: public void doPost(HttpServle ...
- [最短路径SPFA] POJ 1847 Tram
Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14630 Accepted: 5397 Description Tra ...
- SoapUI中如何传递cookie
import com.eviware.soapui.support.types.StringToStringMap //Get all the cookies in the response def ...
- FileWriter和FileReader简单使用
FileWriter和FileReader使用 package com.main.test; import java.io.FileNotFoundException; import java.io. ...
- php轮流排序,每隔一定的时间轮流进行位置排序,轮询的排行榜:function dataPollingInterval()
/* * @名称: php ,对数组每隔一定的时间(自设定时间)来轮流进行位置排序,轮询的排行榜. 精确到指定的秒 或 分钟 或 小时 或 天 ,对数据列表进行轮排. * @参数: (array)$l ...
- 让android项目支持boost 支持c++11
在Application.mk 里增加-D__GLIBC__ 让项目支持boost 增加 -std=c++11 让项目支持c++11 (3.x的cocos本身已经支持了的) 看起来这样: APP_S ...