应无所住,而生其心
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

net core webapi运用自定义json格式

10685人阅读 2019/11/13 22:54 总访问:4812076 评论:0 收藏:2 手机
分类: .NET Core

接上一篇

net core api json相关,全局配置,时间格式化,首字母小写等:http://www.tnblog.net/aojiancc2/article/details/2829

单独提一块出来写,不然篇幅太多,容易杂乱


想要使用自定义的json格式,其实在控制器中很方便的可以实现:

第二个参数就是这个,但是webapi没有json这个写法

JsonResult是要继承Controller才有的,webapi是继承的ControllerBase,但是我不想让webapi去继承controller会浪费一些效率,因为我们只对外提供数据,不需要和view什么打交道没有必要用到Controller里边多余的东西,所以我们可以使用自定义一个json返回即可


自定义json返回

public class MyJsonResult : ActionResult
{

    JsonSerializerSettings jsonSerializerSettings;

    public object data;

    public MyJsonResult(object data, JsonSerializerSettings jsonSerializerSettings = null)
    {
        this.jsonSerializerSettings = jsonSerializerSettings;
        this.data = data;
    }

    public override void ExecuteResult(ActionContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }
        HttpResponse response = context.HttpContext.Response;
        response.ContentType = "application/json;charset=utf-8";
        string jsonstr = "";
        if (jsonSerializerSettings != null)
        {
            jsonstr = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSerializerSettings);
        }
        else
        {
            jsonstr = JsonConvert.SerializeObject(data, Formatting.Indented);
        }

        response.WriteAsync(jsonstr);
    }
}

然后为了方便使用在APIBaseController(自己写的webapi的父类,方便添加一些共用的代码)中加入代码

[NonAction]
public virtual MyJsonResult MyJson(object data, JsonSerializerSettings serializerSettings=null)
{
    MyJsonResult myJsonResult = new MyJsonResult(data, serializerSettings);
    return myJsonResult;
}

截个图方便看:

然后就可以很方便的使用了

使用方法和微软自带的一样

效果如下:





欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价