请求模型是空的,当我发布到API



我正面临一个问题,通过。net 6 Web API做post请求。我对此有点困惑。从。net 6开始,我们更喜欢使用System.Text.Json来代替Newtonsoft。Json

我在请求模型中有一个Bool属性"isAPRenew">

如果我正在传递"isAPRenew"; "true"作为字符串,整个模型变为空。其他一些数据类型也会出现这种情况。

由于某些原因,我不能从前端调用更改数据类型。

所以我的问题是有没有办法自动处理这些数据,如Newtonsoft。默认情况下由Json处理

你应该使用JsonConverter:

public class BoolConverter : JsonConverter<bool>
{
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
switch (reader.TokenType)
{
case JsonTokenType.True: return true;
case JsonTokenType.False: return false;
case JsonTokenType.String:
{
var value = reader.GetString();
if (value.Equals("true", StringComparison.OrdinalIgnoreCase)
|| value.Equals("yes", StringComparison.OrdinalIgnoreCase)
|| value.Equals("1", StringComparison.Ordinal))
{
return true;
}
if (value.Equals("false", StringComparison.OrdinalIgnoreCase)
|| value.Equals("no", StringComparison.OrdinalIgnoreCase)
|| value.Equals("0", StringComparison.Ordinal))
{
return false;
}
throw new NotSupportedException($"`{value}` can't be converted to `bool`.");
}
case JsonTokenType.Number:
{
return reader.TryGetInt64(out long l) ? Convert.ToBoolean(l) :
reader.TryGetDouble(out double d) && Convert.ToBoolean(d);
}

default: throw new NotSupportedException(" can't be converted to `bool`.");
}
}
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
{
writer.WriteBooleanValue(value);
}

你应该在启动时添加你的转换器:

builder.Services.AddControllers()
.AddJsonOptions(options => options.JsonSerializerOptions.Converters
.Add(new BoolConverter()));

最新更新