我有API控制器-.net core 3.1-
当我调用方法时,我得到响应对象及其属性。
有些可能是空字符串。
我如何配置我的API返回空字符串而不是null
?
我可以在Startup.cs中这样做吗?
?编辑
我使用了这个选项:services.AddMvc().AddJsonOptions(options => { options.JsonSerializerOptions.IgnoreNullValues = true; });
但是它会隐藏空属性,这是我不想要的
在经历了同样的挑战和研究之后,我发现你完全可以将null转换为空字符串,并且仍然在你的前端显示这些属性。
我使用了另一个答案(https://stackoverflow.com/a/67286291/11463515)作为参考,并做了以下操作。
步骤1:
在与Startup.cs
文件相同的目录中创建一个新的类文件,并使用以下代码将其命名为NullToEmptyStringConverter.cs
:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace API
{
public class NullToEmptyStringConverter : JsonConverter<string>
{
// Override default null handling
public override bool HandleNull => true;
public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) =>
reader.TokenType == JsonTokenType.Null ? "" : reader.GetString();
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) =>
writer.WriteStringValue(value ?? "");
}
}
确保Startup.cs
和NullToEmptyStringConverter.cs
使用相同的命名空间!
步骤2:
在创建NullToEmptyStringConverter.cs
文件之后,您现在可以简单地将以下内容添加到services.AddControllers()
方法中,使其看起来像这样:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new NullToEmptyStringConverter());
});
}
应该是这样!这样,响应中所有值为NULL
或null
的字符串值将被替换为""
。