web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为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就会变成""; 

解决的方法是自定义返回类型(返回类型为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 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就会变成"",解决方法同方法一。 

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

.net web api返回结果为json的更多相关文章

  1. web api 返回数据XML JSON

    WEBAPI返回的数据格式一般是XML和JSON.能根据请求的要求返回.经过试验如下: public object Get(string uid) { return new {msg="成功 ...

  2. .net mvc web api 返回 json 内容,过滤值为null的属性

    原文:http://blog.csdn.net/xxj_jing/article/details/49508557 版权声明:本文为博主原创文章,未经博主允许不得转载. .net mvc web ap ...

  3. ASP.NET WEB API 返回JSON 出现2个双引号问题

    前言          在使用ASP.NET WEB API时,我想在某个方法返回JSON格式的数据,于是首先想到的就是手动构建JSON字符串,如:"{\"result\" ...

  4. MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。

    原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...

  5. web api返回格式小结

    web api返回格式小结: 1.默认是返回xml格式数据,如果需要返回json格式,需要在Global.asax中加入: GlobalConfiguration.Configuration.Form ...

  6. 利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理

    在我们开发Web API应用的时候,我们可以借鉴ABP框架的过滤器Filter和特性Attribute的应用,实现对Web API返回结果的封装和统一异常处理,本篇随笔介绍利用AuthorizeAtt ...

  7. Web API返回JSON数据

    对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...

  8. web Api 返回json 的两种方式

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

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

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

随机推荐

  1. mysql 存储过程 例子

    DROP PROCEDURE IF EXISTS variable_demo; delimiter // CREATE PROCEDURE variable_demo() BEGIN select ' ...

  2. pm2 服务器命令

    1..配置日志文件路径 命令:pm2 start /home/admin/node/fotonIp/bin/www  --name ip -i 4  -o   "/app/node/logs ...

  3. 记python版本管理--pyenv

    随记: 众所周知,python2.x版本与3.x版本有比较大的区别,如果你是2.x版本的使用者,突然接了3.x版本的项目,或者反过来,遇到这种情况该怎么办呢?重新安装自己电脑上的python,来匹配对 ...

  4. JZOJ 1265. Round Numbers

    1265. Round Numbers(rndnum.pas/c/cpp) (File IO): input:rndnum.in output:rndnum.out Time Limits: 1000 ...

  5. 24.VUE学习之-变异方法filter与regexp实现评论搜索功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 动态规划:HDU-2542-0-1背包问题:饭卡

    解题心得: 这题就是一个简单的0-1背包问题,只不过加了一系列的限制.可以想办法消去限制,直接转换成0-1背包问题的模板形式. 需要注意的几个点:首先对于剩余的5元钱的处理可以直接在总的钱数上将5减去 ...

  7. Diycode开源项目 NodeListFragment分析

    1.整体分析 1.1.作用讲解 这个类没有用到,只是一个备用的. 分类列表,用于定制首页内容 考虑到节点列表一般不会变化,所以直接将数据封装在客户端中,可以直接查看,提高效率. 1.2.整体分析 首先 ...

  8. OpenCV学习笔记(八) 边缘、线与圆的检测

    边缘检测 对图像进行边缘检测之前,一般都需要先进行降噪(可调用GaussianBlur函数). Sobel算子 与 Scharr算子 都是一个离散微分算子 (discrete differentiat ...

  9. P1198 [JSOI2008]最大数(单调栈)

    P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...

  10. easyui的layout

    1.浏览器自适应(即浏览器改变大小,里面的表格大小也会随之改变)要设置两个参数 (1)一般都要在body上设置class=“easyui-layout”: <body class="e ...