侧边栏壁纸
博主头像
进击的码农博主等级

新年新气象,开搞开搞

  • 累计撰写 31 篇文章
  • 累计创建 11 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

请求和响应时对数据进行处理

wosperry
2022-12-15 / 0 评论 / 0 点赞 / 14 阅读 / 1794 字

API请求JSON特殊处理

###场景

框架处理的请求和返回的转换后的string,有时候不是我们预期的样子。

可以使用 JsonSerializerOptions.Converters.Insert() 添加一个自定义的转换器,对特定的格式进行处理。

代码

builder.Services.AddControllers(options =>
{
}).AddJsonOptions(options =>
{
    options.JsonSerializerOptions.PropertyNamingPolicy = null;

    options.JsonSerializerOptions.Converters.Insert(0, new CustomDateTimeJsonConverter());
    options.JsonSerializerOptions.Converters.Insert(0, new CustomGuidJsonConverter());
});
public class CustomDateTimeJsonConverter : JsonConverter<DateTime?>
{
    public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var originValue = reader.GetString();
        if (DateTime.TryParse(originValue, out DateTime dateTime))
        {
            return dateTime;
        }
        return null;
    }

    public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value?.ToString("yyyy-MM-dd HH:mm:ss fff") ?? "");
    }
}


public class CustomGuidJsonConverter : JsonConverter<Guid>
{
    public override Guid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var originValue = reader.GetString();
        if (Guid.TryParse(originValue, out Guid guid))
        {
            return guid;
        }
        return Guid.Empty;
    }

    public override void Write(Utf8JsonWriter writer, Guid value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString().ToUpper());
    }
}
0

评论区