当前位置: 首页 > news >正文

C# WebApi 返回JSON

C# WebApi 返回JSON

 

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

 

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

        public HttpResponseMessage ReturnJson()
        {
            //初始化测试对象
              TestJsonObj t = new TestJsonObj();
            t.Name = "alun";
            t.Address = "GZ";

            //OBJ转化成JSON
            string json = JsonConvert.SerializeObject(t);

            //返回json数
              return new HttpResponseMessage()
            {
                Content = new StringContent(json, Encoding.UTF8, "application/json"),
            };
        }

TestJsonObj是我们测试的类

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

 

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

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

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

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

 

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

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

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

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

 

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

 

注意:

如果使用了swagger:

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

image

 

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

image

 

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

            //设置返回json
            if (CPublicAttribute.TestEnviroment)
            {
                config.Formatters.Clear();
                config.Formatters.Add(new JsonMediaTypeFormatter());
            }
            else
            {
                var jsonFormatter = new JsonMediaTypeFormatter();
                config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
posted on 2017-05-22 10:18 alun-chen 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/alunchen/p/6888260.html

相关文章:

  • 可执行文件的装载
  • 自己定义控件 播放GIF动画
  • WEB服务器-Nginx之虚拟主机、日志、认证及优化
  • day06 tar命令使用,vim简单操作以及linux开机过程
  • 面面观 | 使用dokcer 构建 mariadb 数据库
  • 3 个在 Linux 中永久并安全删除文件和目录的方法
  • 再会Java
  • 自动化运维工具SaltStack详细部署
  • PHP MySQL
  • 算法之选择排序算法
  • 我会采更多的雏菊
  • c语言中字符串函数的使用
  • 利用jquery编写加法运算验证码
  • 更改计算机名称,影响TFS之前映射的工作区 使用。
  • mysql/Java服务端对emoji的支持
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Redis 中的布隆过滤器
  • vue的全局变量和全局拦截请求器
  • 编写符合Python风格的对象
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于extract.autodesk.io的一些说明
  • 什么是Javascript函数节流?
  • 用jquery写贪吃蛇
  • k8s使用glusterfs实现动态持久化存储
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​什么是bug?bug的源头在哪里?
  • "无招胜有招"nbsp;史上最全的互…
  • $().each和$.each的区别
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (一)WLAN定义和基本架构转
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转载)Linux网络编程入门
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net反混淆脱壳工具de4dot的使用
  • .net和jar包windows服务部署
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @Service注解让spring找到你的Service bean
  • @synthesize和@dynamic分别有什么作用?
  • @vue/cli脚手架
  • [Android Pro] AndroidX重构和映射
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [C语言]——柔性数组
  • [Design Pattern] 工厂方法模式