ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)

简介:

业务场景:

统一返回格式参数中,如果包含 Null 值,调用方会不太好处理,需要替换为空字符串,示例:

{
    "response":{
        "code":200,
        "msg":"Remote service error",
        "result":null
    }
}

替换为:

{
    "response":{
        "code":200,
        "msg":"Remote service error",
        "result":""
    }
}

具体实现:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

public class WebApiResultMiddleware : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext context)
    {
        if (context.HttpContext.Request.Path.HasValue)
        {
            if (context.HttpContext.Request.Path.Value.ToLower().IndexOf(".inside.") < 0)
            {
                if (context.Result is FileContentResult || context.Result is EmptyResult)
                {
                    return;
                }
                if (context.Result is ObjectResult)
                {
                    var objectResult = context.Result as ObjectResult;
                    var settings = new JsonSerializerSettings()
                    {
                        ContractResolver = new NullToEmptyStringResolver(),
                        DateFormatString = "yyyy-MM-dd HH:mm"
                    };
                    context.Result = new JsonResult(new { data = objectResult.Value }, settings);
                }
                else
                {
                    context.Result = new ObjectResult(new { data = new { } });
                }
            }
        }
    }
}

public class NullToEmptyStringResolver : Newtonsoft.Json.Serialization.DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        return type.GetProperties()
                .Select(p => {
                    var jp = base.CreateProperty(p, memberSerialization);
                    jp.ValueProvider = new NullToEmptyStringValueProvider(p);
                    return jp;
                }).ToList();
    }
}

public class NullToEmptyStringValueProvider : IValueProvider
{
    PropertyInfo _MemberInfo;
    public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
    {
        _MemberInfo = memberInfo;
    }

    public object GetValue(object target)
    {
        object result = _MemberInfo.GetValue(target);
        if (result == null) result = "";
        return result;

    }

    public void SetValue(object target, object value)
    {
        _MemberInfo.SetValue(target, value);
    }
}

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/asp-net-core-webapi-json-convert-empty-string-instead-of-null.html,如需转载请自行联系原作者

相关文章
|
22天前
|
JSON PHP 数据格式
php 删掉空的数组 json数据. 空数据(false 0 ““ null)
php 删掉空的数组 json数据. 空数据(false 0 ““ null)
php 删掉空的数组 json数据. 空数据(false 0 ““ null)
|
6月前
|
JSON 数据格式
HttpClient封装类并接收POST请求传json参数
今天总结一下对于HttpClient的封装以及使用,便于以后的使用,这里我只封装了接收参数为Json形式的POST与GET两种方法,对于其他的方法大家可以随时留言,一起讨论。
151 0
|
7月前
|
JSON PHP 计算机视觉
php百度人脸识别param[image_template] is null使用BASE64图片类型json_decode返回NULL的处理解决方案
php百度人脸识别param[image_template] is null使用BASE64图片类型json_decode返回NULL的处理解决方案
74 0
|
7月前
|
JSON JavaScript PHP
layui框架实战案例(2):layui文件上传PHP后台参数获取方式及JSON返回格式
layui框架实战案例(2):layui文件上传PHP后台参数获取方式及JSON返回格式
248 0
|
7月前
|
JSON PHP 数据格式
PHP中json传递请求字符串网址函数http_build_query()与parse_str(),将POST参数组转换拼接成GET请求链接
PHP中json传递请求字符串网址函数http_build_query()与parse_str(),将POST参数组转换拼接成GET请求链接
83 0
|
7月前
|
JSON Java 数据格式
springboot 接口返回json中null转换成空数组或空字符串(递归+反射实现)
本来想加一个Jackson的配置类修改ObjectMapper实现把null转空字符串或空数组,但是加上之后发现没效果,找不到问题在哪里,不知道是不是我使用@RestControllerAdvice全局返回处理类的问题,所以就自己写了一个工具类方法处理,就在全局返回处理类里面调用
|
8月前
|
SQL JSON 分布式计算
hive get_json_object解析json结果为null咋办?
解决get_json_object解析json结果为null的问题
287 0
|
8月前
|
JSON fastjson 数据格式
利用过滤器简单粗暴的解决FastJson转JSON后字段存在null的问题
如果使用下面fastjson内置的几种策略,通过名字大家基本上知道它们的作用,这种不会过滤掉日期字段的null
246 0
|
9月前
|
JSON 数据格式
java202303java学习笔记第四十六天-请求-日期参数&json参数1
java202303java学习笔记第四十六天-请求-日期参数&json参数1
54 0

热门文章

最新文章

相关产品

  • 云迁移中心