使用Jil序列化JSON提升Asp.net web api 性能
JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环。 通天塔
在Asp.net web api 里面我们可以插入自定义的MediaTypeFormatter(媒体格式化器),
说白了就是根据HTTP content-type application/json
来判断采用哪种媒体格式化器

具体实现,记得要引入Jil包
public class JilFormatter : MediaTypeFormatter
{
private readonly Options _jilOptions;
private MethodInfo _method; public JilFormatter()
{
//要序列化的时间格式
_jilOptions = new Options(dateFormat: DateTimeFormat.ISO8601);
//媒体类型
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
//加入 UTF8Encoding 编码
SupportedEncodings.Add(new UTF8Encoding(encoderShouldEmitUTF8Identifier: false, throwOnInvalidBytes: true));
//加入 UnicodeEncoding 编码
SupportedEncodings.Add(new UnicodeEncoding(bigEndian: false, byteOrderMark: true, throwOnInvalidBytes: true)); }
//判断是否反序列化类型
public override bool CanReadType(Type type)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
return true;
}
//判断是否序列化类型
public override bool CanWriteType(Type type)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
return true;
} // 异步反序列化一个指定类型的对象。
public override Task<object> ReadFromStreamAsync(Type type, Stream readStream, System.Net.Http.HttpContent content, IFormatterLogger formatterLogger)
{
return Task.FromResult(DeserializeFromStream(type, readStream));
} private object DeserializeFromStream(Type type, Stream readStream)
{
try
{
using (var reader = new StreamReader(readStream))
{
return JSON.Deserialize(reader, type, _jilOptions);
}
}
catch
{
return null;
}
} // 异步序列化一个指定类型的对象。
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, System.Net.Http.HttpContent content, TransportContext transportContext)
{
var streamWriter = new StreamWriter(writeStream);
JSON.Serialize(value, streamWriter, _jilOptions);
streamWriter.Flush();
return Task.FromResult(writeStream);
}
}
加入到媒体格式化器集合中
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务 // Web API 路由
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional } );
GlobalConfiguration.Configuration.Formatters[] = new JilFormatter();
}
}
控制类
public class HomeController : ApiController
{
public static List<Market> Markets = new List<Market>(); public HomeController()
{ } static HomeController()
{
Markets.Add(new Market { Id = , Name = "", DateTimeNow = DateTime.Now });
Markets.Add(new Market { Id = , Name = "", DateTimeNow = DateTime.Now });
Markets.Add(new Market { Id = , Name = "", DateTimeNow = DateTime.Now });
Markets.Add(new Market { Id = , Name = "", DateTimeNow = DateTime.Now });
Markets.Add(new Market { Id = , Name = "", DateTimeNow = DateTime.Now });
}
public IEnumerable<Market> Get()
{
return Markets;
}
public HttpResponseMessage Post([FromBody]Market value)
{
Markets.Add(value);
return new HttpResponseMessage(HttpStatusCode.OK);
} public HttpResponseMessage Put(int id, [FromBody]Market value)
{
var market = Markets.Where(x => x.Id == id).FirstOrDefault();
if (market == null)
return new HttpResponseMessage(HttpStatusCode.NotFound); market.Name = value.Name;
return new HttpResponseMessage(HttpStatusCode.OK);
} public HttpResponseMessage Delete(int id)
{
var result = Markets.Remove(Markets.Where(x => x.Id == id).FirstOrDefault());
return result
? new HttpResponseMessage(HttpStatusCode.Accepted)
: new HttpResponseMessage(HttpStatusCode.NotFound);
}
}
我们通过postman访问

我们在post一个实体

我们在get一下

已经可以看见刚才post的实体了。
源码:http://pan.baidu.com/s/1i3o6KD3
Asp.net Mvc vnext 系列 http://www.cnblogs.com/liek/p/4634294.html
得到你的肯定是我最大的动力!
使用Jil序列化JSON提升Asp.net web api 性能的更多相关文章
- 8 种提升 ASP.NET Web API 性能的方法
ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...
- 六种简单方法提升ASP.NET Web API性能
ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...
- 8种提升ASP.NET Web API性能的方法
英文原文:8 ways to improve ASP.NET Web API performance ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没 ...
- [转载]8 种提升 ASP.NET Web API 性能的方法
http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance 英文原文:8 ways to improve A ...
- 8 种提升 ASP.NET Web API 性能的方法 (转)
出处:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance ASP.NET Web API 是非常棒的 ...
- 8 种提升ASP.NET Web API性能的方法
ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...
- 8种提升 ASP.NET Web API 性能的方法
- Jil序列化JSON
使用Jil序列化JSON提升Asp.net web api 性能 JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入 ...
- ASP.NET Web API 提升性能的方法实践
ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...
随机推荐
- ARM 嵌入式中断
1. SATA中断要打开,挂在fiq上(通过cpu中断的fiq中断enable位,对sata中断使能), 2.外设及GPIO中断打开,挂在irq上(通过cpu中断的irq 的enable位对其使能), ...
- Java nio 笔记:系统IO、缓冲区、流IO、socket通道
一.Java IO 和 系统 IO 不匹配 在大多数情况下,Java 应用程序并非真的受着 I/O 的束缚.操作系统并非不能快速传送数据,让 Java 有事可做:相反,是 JVM 自身在 I/O 方面 ...
- java io读书笔记(6) Writing Arrays of Bytes
显而易见,一次性写出一堆数据,要比一个byte一个byte的写,快多了,因此,outputstream,给出了2个增强型的write: public void write(byte[] data) t ...
- scrollView中的pagingEnabled的功能
pagingEnabled是分页设置,以页为单位滑动,即自动到下一页的开始边界
- Winform 基本属性
WinForm--- 客户端应用程序 - 是需要安装在用户电脑上才可以使用的程序特点:不需要联网也可以打开使用部分功能但是现在的情况是许多功能依然需要互联网的支持 代码部分在用户电脑上执行 WinFo ...
- 转:python webdriver API 之下拉框处理
下拉框也是 web 页面上非常常见的功能,webdriver 对于一般的下拉框处理起来也相当简单,要想定位下拉框中的内容,首先需要定位到下拉框:这样的二次定位,我们在前面的例子中已经有过使用,下面通过 ...
- java系统时间的调用和格式转换
java在java.text java.util java.lang包中查找 import java.util.*; import java.text.*; public class Text ...
- codevs 2235 机票打折
http://codevs.cn/problem/2235/ 2235 机票打折 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 青铜 Bronze 题解 题目描述 ...
- jsp编写页面时常见错误提示
jsp编写页面时常见错误提示 404-->未部署web应用 500-->代码有问题 无法显示网页-->未启动tomcat webRoot-->URL输入有误 web-inf-- ...
- URAL 1139 City Blocks(数论)
The blocks in the city of Fishburg are of square form. N avenues running south to north and Mstreets ...