TimeSpan的系统文本JsonSerializer反序列化
System Text JsonSerializer Deserialization of TimeSpan
在研究如何使用 Newtonsoft 的 JSON.net 反序列化 TimeSpan
时,我在当前项目中遇到了未使用 Json.net 的代码。它使用 System.Text.Json.JsonSerializer
和 appeared 在反序列化 TimeSpan
属性, 的操作中不会失败,根据单元测试我是 运行.
太好了,我想,.Net Core 3.1 已经超越了反序列化 TimeSpan
的 历史 问题,一切都很好.所以在最新版本的 Linqpad 6(使用 .NET Core)中启动了一个测试用例来验证,令我懊恼的是它失败了。
所以问题是,TimeSpan
可以 serialized/deserialized 使用任一库吗( 如果是,如何 )……或者我的测试用例是否有缺陷在某些方面?
代码
public class Project { public TimeSpan AverageScanTime { get; set; } }
Linqpad C# 代码
var newP = new Project() { AverageScanTime = TimeSpan.FromHours(1) };
newP.Dump("New one");
var json = System.Text.Json.JsonSerializer.Serialize(newP);
json.Dump("JSON serialized");
System.Text.Json.JsonSerializer.Deserialize<Project>(json)
.Dump("JSON Deserialize");
反序列化失败
TimeSpan 的 JsonSerializer 似乎将添加到 Future (removed from .NET 6 milestone). You can trace this issue in Future milestone or this issue。
此时可以自己实现JsonTimeSpanConverter。或者你可以安装 Macross.Json.Extensions nuget package and follow the instruction 到 de/serializer.
Poy Chang 回答的补充
招摇(Swashbuckle)也需要配置
services.AddSwaggerGen(options =>
{
options.MapType(typeof(TimeSpan), () => new OpenApiSchema
{
Type = "string",
Example = new OpenApiString("00:00:00")
});
});
TimeSpanConverter 在 .NET 6.0 中可用。因此 TimeSpan serialization/deserialization 无需开箱即用的自定义转换器即可工作。
在研究如何使用 Newtonsoft 的 JSON.net 反序列化 TimeSpan
时,我在当前项目中遇到了未使用 Json.net 的代码。它使用 System.Text.Json.JsonSerializer
和 appeared 在反序列化 TimeSpan
属性, 的操作中不会失败,根据单元测试我是 运行.
太好了,我想,.Net Core 3.1 已经超越了反序列化 TimeSpan
的 历史 问题,一切都很好.所以在最新版本的 Linqpad 6(使用 .NET Core)中启动了一个测试用例来验证,令我懊恼的是它失败了。
所以问题是,TimeSpan
可以 serialized/deserialized 使用任一库吗( 如果是,如何 )……或者我的测试用例是否有缺陷在某些方面?
代码
public class Project { public TimeSpan AverageScanTime { get; set; } }
Linqpad C# 代码
var newP = new Project() { AverageScanTime = TimeSpan.FromHours(1) };
newP.Dump("New one");
var json = System.Text.Json.JsonSerializer.Serialize(newP);
json.Dump("JSON serialized");
System.Text.Json.JsonSerializer.Deserialize<Project>(json)
.Dump("JSON Deserialize");
反序列化失败
TimeSpan 的 JsonSerializer 似乎将添加到 Future (removed from .NET 6 milestone). You can trace this issue in Future milestone or this issue。
此时可以自己实现JsonTimeSpanConverter。或者你可以安装 Macross.Json.Extensions nuget package and follow the instruction 到 de/serializer.
Poy Chang 回答的补充
招摇(Swashbuckle)也需要配置
services.AddSwaggerGen(options =>
{
options.MapType(typeof(TimeSpan), () => new OpenApiSchema
{
Type = "string",
Example = new OpenApiString("00:00:00")
});
});
TimeSpanConverter 在 .NET 6.0 中可用。因此 TimeSpan serialization/deserialization 无需开箱即用的自定义转换器即可工作。