如何解决无法将字符串转换为TimeSpan
因此,我正在创建一个服务(使用ASP.NETCore 3.1),该服务接收有关可以在系统中注册的商店的运营计划信息。为此,我有一个与数据库通信的实体和与该实体通信的模型,如下所示:
实体:
public class OperationSchedule
{
public int Id { get; set; }
public TimeSpan Open { get; set; }
public TimeSpan Close { get; set; }
public DayOfWeek DatofWeek { get; set; }
}
型号:
public class OperationScheduleModel
{
public TimeSpan Open { get; set; }
public TimeSpan Close { get; set; }
public DayOfWeek DatofWeek { get; set; }
}
当然,它们已经使用自动映射器进行了映射。我正在大摇大摆地测试这种通信。问题开始于我尝试发布新的“操作时间表”时,大张旗鼓地向我显示以下输出:
将值“字符串”转换为“ System.TimeSpan”时出错
在我第一次尝试解决此问题的过程中,我尝试使用Microsoft.AspNetCore.Mvc.NewtonsoftJson,并通过以下方式对其进行配置:services.AddMvc().AddNewtonsoftJson();
只要它不能解决我的问题,我就想通过以下操作在Automapper上映射字符串类型和TimeSpan:
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
// Custom types mapping
CreateMap<string,TimeSpan>.ConvertUsing<StringToTimeSpanConverter>();
// OperationSchedule mapping
CreateMap<OperationSchedule,OperationScheduleModel>();
CreateMap<OperationScheduleModel,OperationSchedule>();
}
}
但是VisualStudio不允许我这样做,它说a不能使用“ StringToTimeSpanConverter”作为通用属性,像ConvertUsing(new StringToTimeSpanConverter());
这样的东西没有任何区别。
我什至无法想象解决该问题的另一种方法,但是我可能会遗漏一些东西吗?请帮助
解决方法
将值“字符串”转换为“ System.TimeSpan”时出错
其原因是System.Text.Json
不支持TimeSpan。
一种解决方案是返回到JSON.NET
。步骤如下:
添加对Microsoft.AspNetCore.Mvc.NewtonsoftJson
的程序包引用。
更新Startup.ConfigureServices
以呼叫AddNewtonsoftJson
。
services.AddControllers()
.AddNewtonsoftJson();
另一种选择是对该时间跨度使用自定义转换器:
public class CustomConverter : JsonConverter<TimeSpan>
{
public override TimeSpan Read(ref Utf8JsonReader reader,Type typeToConvert,JsonSerializerOptions options)
{
var value = reader.GetString();
return TimeSpan.Parse(value);
}
public override void Write(Utf8JsonWriter writer,TimeSpan value,JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToString());
}
}
使用Startup.ConfigureServices
在AddJsonOptions
中注册:
services.AddControllers()
.AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new CustomConverter())
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。