在默认情况下,当我们新建一个webapi项目,会自动返回XML格式的数据,如果我们想返回JSON的数据,可以设置下面的三种方法。

1. 不用改配置文件,在Controller的方法中,直接返回HttpResponseMessage

  1. public HttpResponseMessage ReturnJson()
  2. {
  3. //初始化测试对象
  4. TestJsonObj t = new TestJsonObj();
  5. t.Name = "alun";
  6. t.Address = "GZ";
  7.  
  8. //OBJ转化成JSON
  9. string json = JsonConvert.SerializeObject(t);
  10.  
  11. //返回json数
  12. return new HttpResponseMessage()
  13. {
  14. Content = new StringContent(json, Encoding.UTF8, "application/json"),
  15. };
  16. }

TestJsonObj是我们测试的类

上面的方法比较繁杂,但是灵活。每次都要把对象转换成JSON,效率上有点慢。

2. 在全局设置中,把所有返回的格式清除,设置JSON。所有的返回的xml格式都会被清除

在WebApiConfig类的Register方法中,我们添加下面代码:

  1. config.Formatters.Clear();
  2. config.Formatters.Add(new JsonMediaTypeFormatter());

这种方式虽然可以实现功能,但是所有的conent negotiation还是会发生,这就会产生以下额外的开销了。因为,你已经知道要返回的结果了,也只想返回Json,其他的content negotiation都不需要了。

3. 在全局设置中,使用自定义的只返回Json Result。只让api接口中替换xml,返回json

在WebApiConfig类的Register方法中,我们添加下面代码:

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

使用自定义的只返回Json Result的content negotiation代替Web Api中默认的content negotiation。

本文推荐方法3,因为简单好用。

注意:

如果使用了swagger:

当使用方法1,在swagger页面上,返回的obj的说明文档不会显示出来

当使用方法3,swagger说明文档会一直处于fetching resource的状态。

所以我们在测试的时候使用方法2,正式环境的时候使用方法3,做一个判断就可以了,如下:

  1. //设置返回json
  2. if (CPublicAttribute.TestEnviroment)
  3. {
  4. config.Formatters.Clear();
  5. config.Formatters.Add(new JsonMediaTypeFormatter());
  6. }
  7. else
  8. {
  9. var jsonFormatter = new JsonMediaTypeFormatter();
  10. config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

C# WebApi 返回JSON的更多相关文章

  1. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  2. webapi返回json格式优化

    一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 config.Formatters.Remove(config.For ...

  3. webapi返回json格式,并定义日期解析格式

    1.webapi返回json格式 var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferen ...

  4. (转)WebApi返回Json格式字符串

    原文地址:https://www.cnblogs.com/elvinle/p/6252065.html WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉 ...

  5. WebAPI搭建(二) 让WebAPI 返回JSON格式的数据

    在RestFul风格盛行的年代,对接接口大多数人会选择使用JSON,XML和JSON的对比传送(http://blog.csdn.net/liaomin416100569/article/detail ...

  6. webapi返回json格式优化 转载https://www.cnblogs.com/GarsonZhang/p/5322747.html

    一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 1 config.Formatters.Remove(config.F ...

  7. WebAPI返回JSON的正确格式

    最近打算用WebAPI做服务端接口,返回JSON供ANDROID程序调用,结果试了好几次JSONObject都无法解析返回的JSON字符串.看了一下服务端代码: public string Get() ...

  8. WebAPI返回JSON

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

  9. webapi 返回json

    web api 默认的已 xml 格式返回数据 现在开发一般都是以 json 格式为主 下面配置让 webapi 默认返回 json ,在需要返回 xml 时只需要加一个查询参数 datatype=x ...

随机推荐

  1. [mysqli_escape]mysql转义两次

    // mysqli_real_escape_string // 第一次转义的结果 SELECT * FROM example WHERE f_email='example@exampl.com' an ...

  2. To datafix AR DATE

    http://www.cnblogs.com/benio/archive/2012/07/07/2580203.html AR transactions should be created on 6- ...

  3. 7.css浮动与定位

    外边距塌陷 解决方案: ◆给父盒子加border ◆overflow:hidden; bfc 行内元素可以定义左右的内外边距,上下会被忽略掉. 行内块可以定义内外边距. 文档流(标准流) 元素自上而下 ...

  4. 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象

    本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...

  5. 在我朝如何为Brackets安装扩展?

    Brackets是Adobe发起的一个开源的HTML编辑器,界面优美简洁.扩展丰富.支持基于Chrome浏览器的实时预览,非常适合对于Web的开发和学习. 但是Brackets的安装包下载和扩展下载, ...

  6. 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑

    [源码下载] 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 作者:webabcd 介绍背水一战 Windows 10 之 控件(媒体类) InkCanv ...

  7. java servlet编写验证码

    import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buffere ...

  8. 牛客第二场 C.message(计算几何+二分)

    题目传送:https://www.nowcoder.com/acm/contest/140/C 题意:有n个云层,每个云层可以表示为y=ax+b.每个飞机的航线可以表示为时间x时,坐标为(x,cx+d ...

  9. Java知识锦囊

    最近突然想回顾一下之前的文章,回顾复习一下,正好把觉得还不错的文章收录到这里,方便查阅 Java 2018-04-02 Java计数器之CountDownLatch.CyclicBarrier.Sem ...

  10. Swift5 语言参考(三) 类型

    在Swift中,有两种类型:命名类型和复合类型.一个名为类型是当它的定义可以给出一个特定名称的类型.命名类型包括类,结构,枚举和协议.例如,名为的用户定义类的实例MyClass具有该类型MyClass ...