无法将字符串转换为NodaTime.LocalTime的问题求助
解决NodaTime.LocalTime JSON转换错误:Cannot convert value to NodaTime.LocalTime
问题原因
你遇到的问题不是"22:00"格式不符合要求——这个字符串本身是标准的NodaTime.LocalTime格式,问题出在JSON序列化/反序列化库默认不支持NodaTime类型,需要手动配置对应的转换器。
解决方案
根据你使用的JSON库,选择对应的配置方式:
1. 使用Newtonsoft.Json(Json.NET)
- 首先安装官方适配包:
NodaTime.Serialization.JsonNet - 在序列化/反序列化时配置NodaTime支持:
如果是ASP.NET项目,在Startup/Program中全局配置:// 普通代码中使用 var settings = new JsonSerializerSettings(); settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); var yourModel = JsonConvert.DeserializeObject<YourModel>(jsonString, settings);services.AddMvc() .AddNewtonsoftJson(options => { options.SerializerSettings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); });
2. 使用System.Text.Json
- 安装官方适配包:
NodaTime.Serialization.SystemTextJson - 配置序列化选项添加NodaTime支持:
ASP.NET项目全局配置:// 普通代码中使用 var options = new JsonSerializerOptions(); options.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); var yourModel = JsonSerializer.Deserialize<YourModel>(jsonString, options);services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb); });
额外说明
没必要移除字符串中的冒号,"22:00"是完全符合LocalTime解析要求的格式,之前的尝试反而会让格式变得不合法,核心是要让JSON库能识别NodaTime类型。
内容的提问来源于stack exchange,提问作者Lee McCready
相关产品推荐
相关产品推荐

