C# WebApi 返回JSON

时间:2023-01-02 18:38:50

在默认情况下,当我们新建一个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的说明文档不会显示出来

C# WebApi 返回JSON

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

C# WebApi 返回JSON

所以我们在测试的时候使用方法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));

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. C#中datatable导出excel(三种方法)

    方法一:(拷贝直接可以使用,适合大批量资料, 上万笔) Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Offi ...

  2. 学习高博SLAM(1)

    这几天按照高博的博客做了一起做RGB-D SLAM (1)和(2) ,,其中大部分步骤都没问题 开发环境是ubuntu14.04+indigo 有几个问题就是: (1)我的电脑不能加载PPA,原因是: ...

  3. Git+Github代码管理控制

    关于Git的发展历程这里就不多介绍了,有兴趣的话可以查阅一下Git的相关历程. 如果你在做的项目或者自己写的一些项目由于需要用的分布式.或者团队开发.再或者你不善于对代码进行定期备份,但又希望自己的代 ...

  4. jdk代理和cglib代理

    1.jdk静态代理(静态代理和动态代理) 本质:在内存中构建出接口的实现类. 缺陷:只能对实现接口的类实现动态代理, 使用cglib可以对没有实现接口的类进行动态代理. 2.cglib动态代理     ...

  5. 本博客停止更新,移至purecpp.org

    声明:本博客停止更新,迁移至C++开源社区purecpp.org, 欢迎持续关注!

  6. 关于TabControl的Trigger【项目】

    我有一个TabControl <TabControl x:Name="ToolSystemSection" Grid.Row="4" ContentTem ...

  7. 关于in与exists的效率讨论

    关于in与exists的效率讨论1).select * from A where id in (select id from B)以上查询使用了in语句,in只执行一次,他查出B表的所有id字段并缓存 ...

  8. 移动端meta标签整理-备

    分类 在介绍移动端特有 meta 标签之前,先简单说一下 HTML meta 标签的一些知识. meta 标签包含了 HTTP 标题信息 (http-equiv) 和 页面描述信息 (name). h ...

  9. SolrJ总结

    1.solrJ概念 solrJ是Java连接solr进行查询检索和索引更新维护的jar包. 2.项目引入solrJ相关jar包 对于maven工程,直接将下面内容加入到pom文件中即可. <de ...

  10. 用定时器T0的中断控制8位LED闪烁

    #include<reg52.h> #define uchar unsigned char #define uint unsigned int uint i; void main() { ...