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, 0, 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 ?? 1;
            take = take ?? 5;

                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, 0, 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 = 1;
                }

            //如果本页没有数据直接显示前一页
            if (page > 1 && PageUseras.Skip(take.Value * (page.Value - 1)).Take(take.Value).Count() < 1)
            {
                ViewBag.CurrentPage = Math.Ceiling(((double)PageUseras.Count() / (double)take));
                PageUseras = PageUseras.Skip(take.Value * (page.Value - 2)).Take(take.Value);
            }
            else
            {
                PageUseras = PageUseras.Skip(take.Value * (page.Value - 1)).Take(take.Value);
            }
            return View(PageUseras);
        }
时间: 2024-11-06 07:10:02

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

C++MFC编程笔记day07 MFC的文件操作、序列化和保存

一 MFC的文件操作 1 相关类 CFile类-封装了文件句柄以及操作文件的API函数. CFileFind类-提供文件查找功能. 2 CFile类的使用 2.1 打开或者新建文件 CFile::Open 2.2 文件读写 注意:1 文件指针位置 2 异常处理 CFile::Write CFile::Read CFile::SeekToBegin 2.3 关闭文件 CFile::Close 2.4 设置/获取文件属性 CFile::SetStatus/GetStatus 3 CFileFind类

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

json格式小巧玲珑,适合做配置文件,特别是大型项目中, 可以将配置信息分类保存到不同的json文件中, 然后再在配置文件中读取配置文件的数据进行赋值, 这里以python为例进行说明: 假设在yourfile.json文件中保存了如下信息: { "user_message":{ "name":"lowman", "age":"14", }, "database":{ "USE

每天进步一点点-序列化和反序列(将对象写入硬盘文件and从硬盘文件读出对象)

一个类如果实现了Serializable接口,那么这个类创建的对象就是所谓序列化的对象.所谓"对象序列化": 简单一句话:使用它可以象存储文本或者数字一样简单的存储对象.一个应用是,程序在执行过程中突然遇到短电或者其他的故障导致程序终止,那么对象当前的工作状态也就会丢失,这对于有些应用来说是可怕的.用对象序列化就可以解决这个问题,因为它可以将对象的全部内容保存于磁盘的文件,这样对象执行状态也就被存储了,到需要时还可以将其从文件中按原样再读取出来,这样就解决了数据丢失问题.对象序列化可以

[转]自定义ASP.NET MVC JsonResult序列化结果

本文转自:http://blog.163.com/[email protected]/blog/static/17174770720121293437119/ 最近项目中前台页面使用EasyUI的jQuery插件开发中遇到,EasyUI Form中的Datebox组件绑定ASP.NET MVC返回的DateTime类型的数据错误,因为ASP.NET MVC返回的DateTime类型的JsonResult的结果中的值是"\/Date(277630788015)\/",于是EasyUI显示

文件I/O:文件流→序列化

★文件流 文件操作是最简单最直接也是最容易想到的一种方式,我们说的文件操作不仅仅是通过FileInputStream/FileOutputStream这么"裸"的方式直接把数据写入到本地文件(像我以前写的一个扫雷的小游戏JavaMine就是这样保存一局的状态的),这样就比较"底层"了. 主要类与方法和描述 1. FileInputStream.read() //从本地文件读取二进制格式的数据 2. FileReader.read() //从本地文件读取字符(文本)数

原生js封装ajax:传json,str,excel文件上传表单提交

由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(uri, data, cb) { $.ajax({ url: uri, type: 'POST', dataType: 'json', data: data, }) .done(cb) .fail(function() { console.log("error"); }) .always(f

[PHP 作为iOS后台Json格式HTTP通信及文件上传的实现]

1.数据库连接 configmysql.php <?php $q = mysql_connect("localhost:8889","root","root"); if(!$q) { die('Could not connect: ' . mysql_error()); } mysql_query("set names utf8"); //以utf8读取数据 //mysql_select_db("myDB&qu

Android Json 使用jsonschema2pojo生成.java文件文件

--------------------转载请注明:http://blog.csdn.net/feiduclear_up/article/details/42499409 概要 怎么才能快速的开发出带json的android应用.自己定义json对应的具体java beans,用Android自带的Json库解析json是一件很繁琐的事情.所以在这里,我引入一个工具和一个库. Jsonschema2pojo:可以更具json自动生成出相应的javaclasses(http://code.goog

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity