将一个项目升级到 .NET 6 后,执行 response.Content.ReadFromJsonAsync 时出现错误:
System.Text.Json.JsonException: The JSON value could not be converted to System.String. Path: $[0].id | LineNumber: 0 | BytePositionInLine: 907.
---> System.InvalidOperationException: Cannot get the value of a token type 'Number' as a string.
at System.Text.Json.Utf8JsonReader.GetString()
请问如何解决?
通过 JsonNumberHandling.AllowReadingFromString 选项可以解决
return await response.Content.ReadFromJsonAsync<IEnumerable<BlogPostZzkDoc>>(
new JsonSerializerOptions { NumberHandling = JsonNumberHandling.AllowReadingFromString });
上面的解决方法针对的不是提问中的场景,详见 Non-string values for string properties
目前的解决办法就是一写自定义的转换器,二是修改model中属性类型,STJ对序列化这块控制的比较死,这也是它高性能的原因,要求严格的匹配。