C# web api返回类型设置为json的两种方法


web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法:
方法一:(改配置法)

找到Global.asax文件,在Application_Start()方法中添加一句:

复制代码 代码如下:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

修改后:
复制代码 代码如下:

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// 使api返回为json
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}

这样返回的结果就都是json类型了,但有个不好的地方,如果返回的结果是String类型,如123,返回的json就会变成"123";

解决的方法是自定义返回类型(返回类型为HttpResponseMessage)
复制代码 代码如下:

public HttpResponseMessage PostUserName(User user)
{
String userName = user.userName;
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(userName,Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}

方法二:(万金油法)

方法一中又要改配置,又要处理返回值为String类型的json,甚是麻烦,不如就不用web api中的的自动序列化对象,自己序列化后再返回
复制代码 代码如下:

public HttpResponseMessage PostUser(User user)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
string str = serializer.Serialize(user);
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}

方法二是我比较推荐的方法,为了不在每个接口中都反复写那几句代码,所以就封装为一个方法这样使用就方便多了。
复制代码 代码如下:

public static HttpResponseMessage toJson(Object obj)
{
String str;
if (obj is String ||obj is Char)
{
str = obj.ToString();
}
else
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
str = serializer.Serialize(obj);
}
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}

方法三:(最麻烦的方法)

方法一最简单,但杀伤力太大,所有的返回的xml格式都会被毙掉,那么方法三就可以只让api接口中毙掉xml,返回json

先写一个处理返回的类:
复制代码 代码如下:

public class JsonContentNegotiator : IContentNegotiator
{
private readonly JsonMediaTypeFormatter _jsonFormatter;

public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
}

public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
return result;
}
}

找到App_Start中的WebApiConfig.cs文件,打开找到Register(HttpConfiguration config)方法

添加以下代码:
复制代码 代码如下:

var jsonFormatter = new JsonMediaTypeFormatter();
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

添加后代码如下:
复制代码 代码如下:

public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var jsonFormatter = new JsonMediaTypeFormatter();
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
}

方法三如果返回的结果是String类型,如123,返回的json就会变成"123",解决方法同方法一。

其实web api会自动把返回的对象转为xml和json两种格式并存的形式,方法一与方法三是毙掉了xml的返回,而方法二是自定义返回。



相关阅读:
php实现查看邮件是否已被阅读的方法
jQuery统计上传文件大小的方法
当用户退出点击浏览器后退仍可回到原来页面的解决方案
C#将jpg转换为pdf的方法
JavaScript实现的GBK、UTF8字符串实际长度计算函数
本月底将停售 Win8/Win8.1专业版升级包和介质包
Win8.1更新时提示错误代码为80246010的解决方案
C语言练习题:自由落体的小球简单实例
深入剖析Android系统中Service和IntentService的区别
很酷的HTML5电子书翻页动画特效
C#生成条形码图片的简单方法
iOS应用开发中监听键盘事件的代码实例小结
详解Linux系统中的SysVinit的机制
iOS中使用schema协议调用APP和使用iframe打开APP的例子
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 留在心底的风景作文900字 束手无策造句 电脑用处真大作文400字 我喜欢的小金鱼作文600字 讨厌鬼作文 五四青年节演讲稿——青春的火炬 宗月大师 初中初三作文800字:忆影 2015选拔培养妇女干部工作情况的汇报 原来年轻的自己,确实曾经美丽 合资经营合同(金融类) 毕业生实习考核鉴定 “穷”并不能推导出贪腐的结论 家有”酒圣”老爸 2016年入党积极分子个人自传 我爱我的家乡武汉作文 快乐时光作文200字 三十年周年同学会演讲稿 倾一世繁华,不诉离殇 漫天飞舞的蝴蝶 每天一条正能量句子 银行2015年三八妇女节演讲稿 手中的风筝 带着一颗心去旅行 关于烟草产业政策的几点思考 小木偶历险记550字 2015教师培训工作总结 《我们班的博客》读后感作文1100字 妇女病查治普查方案 出纳年终工作总结500字 挞毒 进城务工的父亲,城里漂的儿子 有关于小鸟的800字作文 致给亲爱的牛 小狗安迪 侵蚀——献给在困境中的人们 小清新文字 2016公司培训心得体会 花季,是个酷爱做梦的季节 我不怕失去你们 我的偶像,你是我的骄傲作文350字 关于贝贝的作文200字 董卿:懂得恐惧,才会更珍惜生活 三年级写我的自画像 推开春的大门作文250字 我的爱情,一人之城 幼儿园亲子活动反思4篇 北张庄小学行风评议自查报告 我會將這份思念和祝福...永遠留在內心最深處!

Copyright © 2016 phpStudy |