webapi输出炜json_C# WebApi 返回JSON

本文介绍了在C# WebApi项目中如何设置返回JSON格式数据的三种方法:直接在Controller返回HttpResponseMessage,全局设置清除并添加JSONFormatter,以及使用自定义Json Content Negotiator。推荐在正式环境中使用第三种方法,因为它简洁高效。需要注意的是,使用Swagger时,不同方法会影响返回对象的文档显示。
摘要由CSDN通过智能技术生成

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

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

publicHttpResponseMessage ReturnJson()

{//初始化测试对象

TestJsonObj t = newTestJsonObj();

t.Name= "alun";

t.Address= "GZ";//OBJ转化成JSON

string json =JsonConvert.SerializeObject(t);//返回json数

return newHttpResponseMessage()

{

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 = newJsonMediaTypeFormatter();

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,做一个判断就可以了,如下:

//设置返回json

if(CPublicAttribute.TestEnviroment)

{

config.Formatters.Clear();

config.Formatters.Add(newJsonMediaTypeFormatter());

}else{var jsonFormatter = newJsonMediaTypeFormatter();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值