`

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

阅读更多
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<MediaTypeFormatter> 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 api返回类型设置为json的两种方法_.docx

    C# Web API 返回类型设置为 JSON 的两种方法 在 C# Web API 中,默认返回类型为 XML,但是在实际开发中,JSON 格式更加广泛应用。因此,本文将介绍两种方法来设置 C# Web API 返回类型为 JSON。 方法一:配置法 ...

    WebApi Token+ 数字签名认证源码

    WebApi Token+ 数字签名认证源码是一种常见的安全机制,用于保护Web API接口免受未经授权的访问。在本文中,我们将深入探讨这个主题,重点介绍C# WebAPI中使用Token和数字签名认证的关键概念和实现步骤。 首先,让...

    c#利用Newtonsoft.Json解析json(带数组)

    本教程将深入探讨如何使用Newtonsoft.Json库在C#中解析包含数组的JSON对象,这对于处理从Web API、数据库或其他服务获取的复杂数据至关重要。 首先,我们需要了解Newtonsoft.Json库,它也被称为Json.NET,是一个...

    c# ajax调用webapi上传图片、传值 demo

    - WebAPI方法处理完请求后,返回JSON格式的结果,如图片ID或相似度分数。 - Ajax的`success`回调函数接收并处理这些结果。 6. **安全性和优化**: - 图片上传时应考虑安全性,例如限制文件类型和大小,防止DoS...

    C# 写的一个XML与Json互转类

    总结一下,这个C#编写的XML与Json互转类是为了解决在MVC API或WebAPI项目中,同时支持XML和Json数据格式的需求。它使得开发者能够方便地在两种格式间转换,提高代码的可维护性和用户体验,因为客户端可以选择最适合...

    c# Json库 (.NET2.0)

    通过添加 `[ScriptService]` 特性到服务类,并配置 `WebMethod` 使用JSON返回类型,即可实现JSON响应。 7. **性能优化**:在处理大量JSON数据时,可以使用`JsonTextReader`和`JsonTextWriter`进行流式处理,以减少...

    Web Api使用详解(全部实例讲解,可直接运行看效果)2019

    Web API支持JSON和XML两种默认的媒体类型格式。你可以通过添加自定义媒体类型格式化器来支持其他格式,比如Protobuf或MsgPack。 九、错误处理 当API遇到错误时,应返回适当的HTTP错误状态码。可以使用过滤器来统一...

    .net版本WebApi和AccessWebApi两个项目(分别为宿主和调用方),可直接运行

    3. **Web API**:WebAPI是.NET Framework的一部分,允许开发者创建HTTP服务,可以返回JSON或XML格式的数据,非常适合移动应用、浏览器或其他Web服务作为客户端的通信。 4. **API**:Application Programming ...

    .net版本WebApi和AccessWebApi两个项目(分别为宿主和调用方)_(0601).rar

    该压缩包文件".net版本WebApi和AccessWebApi两个项目(分别为宿主和调用方)_(0601).rar"包含的是基于.NET框架的WebAPI开发示例,主要涉及了C#编程语言。WebAPI是Microsoft为构建RESTful服务提供的一种框架,允许...

    WebApi和AccessWebApi两个项目(分别为宿主和调用方)(经典)

    在IT领域,Web API是构建RESTful服务的一种常见方法,特别是在使用C#和.NET框架时。本主题将深入探讨“WebApi”和“AccessWebApi”两个项目,它们分别作为服务宿主和调用方的角色,这对于理解客户端和服务端之间的...

    .net版本WebApi和AccessWebApi两个项目(分别为宿主和调用方).rar

    - 处理响应:接收Web API返回的数据,通常将其解析为所需的数据结构。 3. RESTful设计原则: Web API遵循REST(Representational State Transfer)架构风格,其核心特点包括资源标识、无状态、缓存等。在Web API中...

    .net版本WebApi和AccessWebApi两个项目(分别为宿主和调用方)

    这两个项目的协作流程可能是这样的:AccessWebApi项目中的一个方法会创建一个HttpClient实例,构造一个指向WebApi的URL,并设置好请求参数。然后,发送请求并等待响应。一旦收到响应,它会解析响应数据,可能将其...

    webapiTest.zip

    项目中的测试程序将展示如何使用C#客户端发送这两种类型的请求,以及WebAPI控制器如何响应。 4. **Winform集成**:Winform是.NET Framework下的桌面应用程序开发框架,项目中的Winform部分可能包含一个用户界面,...

    安卓调用webservice接口

    首先,我们需要了解两种主要的WebService类型:SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。SOAP通常基于XML,数据传输较为复杂但结构严谨;而REST则更倾向于轻量级,常用...

    Q695687 问答的源代码 使用 C# 采集网站返回的json数据

    在这两种情况下,`T`都代表你要转换为的对象类型。 3. **网络请求** 要从网站获取JSON数据,通常会使用HTTP客户端库,如`HttpClient`类: ```csharp using System.Net.Http; using System.Threading.Tasks; ...

    WebApi和AccessWebApi两个项目(分别为宿主和调用方)_《0528》.rar

    在本资源中,我们主要探讨的是使用C#开发的WebAPI和AccessWebApi两个项目,它们分别作为服务宿主和调用方的角色。WebAPI是ASP.NET框架的一部分,用于构建RESTful服务,而AccessWebApi则可能是实现客户端或另一应用...

    8038_JSON_服务器通讯C#_

    7. **Web API和ASP.NET Core**:如果你在C#环境中开发服务器端,Microsoft提供了Web API和ASP.NET Core框架,它们可以轻松创建RESTful服务并返回JSON响应。这些框架内置了JSON处理功能,使得构建和消费JSON API变得...

Global site tag (gtag.js) - Google Analytics