欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.Net基于MVC4 Web Api输出Json格式实例

程序员文章站 2024-02-20 13:16:28
本文实例讲述了.net基于mvc4 web api输出json格式的方法,分享给大家供大家参考。具体实现方法如下: 1、global 中增加json输出 复制代码 代码...

本文实例讲述了.net基于mvc4 web api输出json格式的方法,分享给大家供大家参考。具体实现方法如下:

1、global 中增加json输出

复制代码 代码如下:
globalconfiguration.configuration.formatters.jsonformatter.mediatypemappings.add(new querystringmapping("json", "true", "application/json"));

protected void application_start()
{
    arearegistration.registerallareas();
    //添加json 解析  使用方法 http://xxx/api/action?json=true
    globalconfiguration.configuration.formatters.jsonformatter.mediatypemappings.add(new querystringmapping("json", "true", "application/json"));
    webapiconfig.register(globalconfiguration.configuration);
    filterconfig.registerglobalfilters(globalfilters.filters);
    routeconfig.registerroutes(routetable.routes);
    bundleconfig.registerbundles(bundletable.bundles);
}

2、global 中删除xml解析

复制代码 代码如下:
globalconfiguration.configuration.formatters.xmlformatter.supportedmediatypes.clear();

protected void application_start()
{
    arearegistration.registerallareas();
    webapiconfig.register(globalconfiguration.configuration);
    filterconfig.registerglobalfilters(globalfilters.filters);
    routeconfig.registerroutes(routetable.routes);
    bundleconfig.registerbundles(bundletable.bundles);
    //删除xml的解析 当返回值是string 时 直接返回string不是json对象
    globalconfiguration.configuration.formatters.xmlformatter.supportedmediatypes.clear();
}

3、指定返回格式

新建方法 需要程序集:

复制代码 代码如下:
system.web.extensions
public static httpresponsemessage tojson(object obj)
{
    string str;
    if (obj is string || obj is char)
    {
        str = obj.tostring();
    }
    else
    {
        var serializer = new javascriptserializer();
        str = serializer.serialize(obj);
    }
    var result = new httpresponsemessage { content = new stringcontent(str, encoding.getencoding("utf-8"), "application/json") };
    return result;
}

 调用户方法转换为json对象输出

复制代码 代码如下:
public httpresponsemessage getstring(string name)
{
     return tojson(name);
}

4、重写默认实现类 所有输出将被重新解析成 json

新建jsoncontentnegotiator 类

复制代码 代码如下:
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;
    }
}

webapiconfig中使用重写

复制代码 代码如下:
public static void register(httpconfiguration config)
{
    config.routes.maphttproute(
        name: "defaultapi",
        routetemplate: "api/{controller}/{id}",
        defaults: new { id = routeparameter.optional }
    );

    var jsonformatter = new jsonmediatypeformatter();
    config.services.replace(typeof(icontentnegotiator), new jsoncontentnegotiator(jsonformatter));

    // 取消注释下面的代码行可对具有 iqueryable 或 iqueryable<t> 返回类型的操作启用查询支持。
    // 若要避免处理意外查询或恶意查询,请使用 queryableattribute 上的验证设置来验证传入查询。
    // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?linkid=279712。
    //config.enablequerysupport();

    // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
    // 有关详细信息,请参阅: http://www.asp.net/web-api
    config.enablesystemdiagnosticstracing();
}

希望本文所述对大家的asp.net程序设计有所帮助。