猿教程 Logo

媒体格式器

如您在前一节中所见,Web API接受和处理基于content - type头的JSON和XML格式的数据。但是,它是怎样处理这些不同的格式呢?答案是:通过使用媒体类型格式器。

媒体类型格式器类负责序列化请求/响应数据,以便Web API可以理解请求数据格式和客户期望的发送数据的格式。

Web API包括以下内置的媒体类型格式器。

媒体类型格式化器类MIME类型描述
JsonMediaTypeFormatterapplication/json, text/json处理json格式
XmlMediaTypeFormatterapplication/xml, text/json处理xml格式
FormUrlEncodedMediaTypeFormatterapplication/x-www-form-urlencoded处理HTML表单的url编码数据
JQueryMvcFormUrlEncodedFormatterapplication/x-www-form-urlencoded处理url编码的数据

检索内置的媒体类型格式化器

上面列举了 Web API所包含的媒体格式化器的类型。然而,你也可以添加、删除或更改格式器的顺序。

下面的例子演示了HTTP Get方法返回所有内置formatter类。

public class FormattersController : ApiController
{
    public IEnumerable<string> Get()
    {
        IList<string> formatters = new List<string>();
        foreach (var item in GlobalConfiguration.Configuration.Formatters)
        {
            formatters.Add(item.ToString());
        }
        return formatters.AsEnumerable<string>();
    }
}

在上面的例子中,GlobalConfiguration.Configuration.Formatters返回一个MediaTypeFormatterCollection,它包括所有的格式化器类。

上面的例子中返回所有格式化器类的名称,如下所示。


另外,MediaTypeFormatterCollection类定义了很多属性,通过这些属性可以直接使用四种媒体类型格式器中的三种。

下面的例子演示了使用MediaTypeFormatterCollection的属性检索媒体类型格式器。

public class FormattersController : ApiController
{
    public IEnumerable<string> Get()
    {
        IList<string> formatters = new List<string>();
        formatters.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter.GetType().FullName);
        formatters.Add(GlobalConfiguration.Configuration.Formatters.XmlFormatter.GetType().FullName);
        formatters.Add(GlobalConfiguration.Configuration.Formatters.FormUrlEncodedFormatter.GetType().FullName);
        
        return formatters.AsEnumerable<string>();
    }
}

上面的例子返回给浏览器后的响应如下:



BSON 格式化器

Web API还支持BSON格式。顾名思义,BSON是二进制JSON,它是一个二进制编码类JSON文档的序列化。目前支持BSON的很少并且没有可供客户机运行在浏览器的JavaScript实现。这意味着它是不可能自动检索和解析BSON数据成JavaScript对象的。

Web API包含内置格式化器类BsonMediaTypeFormatter用来支持BSON,但默认情况下是禁用的。了解更多关于Web API对BSON的支持点击这里



JSON 格式化器

如前所述,Web API包括用来处理JSON格式的JsonMediaTypeFormatter类。这个JsonMediaTypeFormatter负责将请求中的Json数据转换成CLR对象,并且将CLR对象转换成返回数据中包含的Json格式的数据。

在内部,JsonMediaTypeFormatter使用名称叫Json.NET的第三方开源库来执行序列化。


配置JSON序列化

JSON格式化器可以在WebApiConfig中配置。JsonMediaTypeFormatter类包括各种用来自定义JSON序列化的属性和方法。

例如,Web API默认使用PascalCase格式编写Json属性名。如果你想使用camelCase格式编写JSON属性名称,可以按下面的方式设置序列化器上的CamelCasePropertyNamesContractResolver,如下所示。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();
            
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        // configure json formatter
        JsonMediaTypeFormatter jsonFormatter = config.Formatters.JsonFormatter;
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }
}

XML格式化器

XmlMediaTypeFormatter类负责将模型对象序列化成XML数据。它使用System.Runtime.DataContractSerializer类来生成XML数据。

想要了解更多关于配置JSON和XML序列化,点击这里



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/webapi/media-formatter.html