You need to enable JavaScript to run this app. Json.Net与System.Text.Json间TimeSpan序列化反序列化兼容问题
优惠活动
大模型
产品
解决方案
定价
更多

Json.Net与System.Text.Json间TimeSpan序列化反序列化兼容问题

解决方案

首先明确:不带双引号的03:30:00不符合JSON规范对字符串类型的定义,Json.Net默认不会将其识别为合法字符串进行反序列化。你可以选择以下两种方案解决问题:

方案1:客户端Json.Net添加自定义转换器(适配服务端非法输出)

在Blazor WASM端实现自定义Json.Net转换器,直接解析未加引号的TimeSpan格式文本:

public class TimeSpanNoQuotesConverter : JsonConverter<TimeSpan>
{
    public override TimeSpan ReadJson(JsonReader reader, Type objectType, TimeSpan existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        string timeSpanText = reader.Value?.ToString() ?? string.Empty;
        return TimeSpan.Parse(timeSpanText);
    }

    public override void WriteJson(JsonWriter writer, TimeSpan value, JsonSerializer serializer)
    {
        writer.WriteValue(value.ToString());
    }
}

将转换器注册到NSwag客户端的序列化配置中:

var jsonSettings = new JsonSerializerSettings();
jsonSettings.Converters.Add(new TimeSpanNoQuotesConverter());
// 赋值给NSwag生成的客户端实例的SerializerSettings属性即可

方案2:修正服务端序列化逻辑(推荐)

正常情况下Utf8JsonWriter.WriteStringValue方法会自动给输出内容添加双引号,你当前服务端输出裸文本属于异常现象。可优先排查服务端序列化配置是否存在全局覆盖、转换器执行顺序错误的问题,保证输出符合JSON规范的带引号TimeSpan字符串,无需修改客户端配置即可兼容Json.Net默认反序列化规则。

内容的提问来源于stack exchange,提问作者NPadrutt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:45:01