当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-08-25

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

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就会变成"123";

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

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

    
 
 

您可能感兴趣的文章:

  • C#取得Web程序和非Web程序的根目录的N种取法总结
  • C# 获取(非)Web程序根目录的可用方法
  • C# Winform调用WEB Service API的示例代码
  • c# JSON返回格式的WEB SERVICE
  • C#使用PHP服务端的Web Service通信实例
  • c# 抓取Web网页数据分析
  • C#实现通过程序自动抓取远程Web网页信息的代码
  • 浅析C# web访问mysql数据库-整理归纳总结
  • C#用Activex实现Web客户端读取RFID功能的代码
  • C#中Web.Config加密与解密的方法
  • c#封装百度web服务geocoding api 、百度坐标转换示例
  • 在jsp页面加载时自动调用某个特定的servlet,由servlet查询数据库输出WEB页面返回给jsp显示?
  • 在Web环境下SQL Server存储过程返回结果集如果需要滚动就出错:Error setting up static cursor cache。而在普通应用中中正常
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • web网页自动跳转方法:Html body onload自动跳转举例
  • aria2的Web接口 a2web
  • Python3通过request.urlopen实现Web网页图片下载
  • SVN的Web管理界面 svn-web-admin
  • Web前端设计:Html强制不换行<nobr>标签用法代码示例
  • 在Web环境下SQL Server存储过程返回结果集如果需要滚动就出错:Error setting up static cursor cache。而在普通应用中中正常 iis7站长之家
  • Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行
  • Web相册 Dumi Web Gallery
  • Web前端设计:html上标<sup>标签与下标<sub>标签详解
  • 请问:authorization of web services和authenication of web services什么区别?
  • Web服务器 Gatling Web Server
  • 小型Web服务器 nweb Web Server
  • 有没有什么方法或思路把web服务器上的文件上传到另外一个web服务器?
  • Java Web应用框架 WEB4J
  • 用Java开发web程序,用什么做web服务器最好?
  • LINUX下面的WEB Service如果编写?是用.NET写吗?WINDOW下面的web service能在LINUX下面用吗?
  • Web爬虫框架 Smart and Simple Web Crawler
  • 在单网卡的linux web服务器上虚拟Windows系统搭建多个.net web网站,有谁做过?
  • 问tomcat中在tomcat启动时,哪个包加载了/WEB-INF下的web.xml文件?要多少给多少分
  • 我是刚开始学web service ,我想请教哪里有构件web Service的具体操作。
  • 100分求《嵌入式系统Web服务器—TCP/IP Lean》或《TCP/IP Lean Web Servers for Embedded Systems 》


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3