新公司里用的Casltl MVC框架,项目基于.Net3.5。
一次调用返回json,发现使用火狐插件JsonView不能格式化json,使用Firebug查看,响应头里没有ContentType的键值。
使用VS插件reflector 查看MonoRail 的源码,发现渲染页面的方法RenderText 渲染后的响应头ContentType为 text/html。
于是我视图给 Castle.MonoRail.Framework.Controller 写个扩展方法 RenderJson ,设置响应头ContentType="application/json",这样JsonView也许就可以正确格式化返回的json了。
完成扩展方法后,这时编译报错:
缺少编译器要求的成员“System.Runtime.CompilerServices.ExtensionAttribute..ctor
谷歌一番,有网友遇到同样的问题,原因是 Newtonsoft.Json.Net20.dll 引起的,因为该类库基于.Net 2.0,但是.Net 2.0不支持扩展方法,所以Json.net作者自己写了一个Attribute,来实现扩展方法,但是这个Attribute在.Net 3.0中已存在同名的,所以在基于.Net 3.0以上项目引用该类库时,就会出现冲突。
解决办法:
1、移除Newtonsoft.Json.Net20.dll后重新引用;(亲测可用)
.
参考: Dozer 关于一个2.0下实现扩展方法所引发的错