无法为 Microsoft.FSharp.Core.Unit 生成自动编码器。请传递一个额外的编码器
Cannot generate auto encoder for Microsoft.FSharp.Core.Unit. Please pass an extra encoder
我从我的 Giraffe 项目中为 returning Thoth.Json 样式 json 创建了一个辅助函数,该函数采用 Result<'a,'b>
和 returns JSON.
let json result next (ctx: HttpContext) =
match result with
| Ok result ->
(setHttpHeader "Content-Type" "application/json" >=>
setBodyFromString (Encode.Auto.toString (0, result))) next ctx
| Error e -> ...
这在我 return Ok ()
之前工作正常,它编译并且应该是完全有效的。
不过Thoth.Json不是很喜欢:
Cannot generate auto encoder for Microsoft.FSharp.Core.Unit. Please pass an extra encoder.
如何检查 result
是否为 unit
或使自动编码器处理 unit
?
我今天遇到了同样的问题,通过创建自定义 Encoder<'T>
和 Decoder<T>
解决了这个问题。有趣的是,一个月前这还不是必需的,我发誓我没有更新任何东西。
这是编码器的样子,您可以使用任何 JSON 作为 return 值。
open Thoth.Json.Net
module UnitEncoder =
let encoder = fun _ -> JsonValue.Parse("null")
let decoder = fun _ _ -> Ok ()
你可以这样定义序列化器
let extraCoders =
Extra.empty
|> Extra.withDecimal
|> Extra.withCustom UnitEncoder.encoder UnitEncoder.decoder
let serializer = Thoth.Json.Giraffe.ThothSerializer(extra = extraCoders)
并照常将其注册为服务
services.AddSingleton<Giraffe.Serialization.Json.IJsonSerializer>(CN.ReportingServices.API.Serialization.serializer) |> ignore
我从我的 Giraffe 项目中为 returning Thoth.Json 样式 json 创建了一个辅助函数,该函数采用 Result<'a,'b>
和 returns JSON.
let json result next (ctx: HttpContext) =
match result with
| Ok result ->
(setHttpHeader "Content-Type" "application/json" >=>
setBodyFromString (Encode.Auto.toString (0, result))) next ctx
| Error e -> ...
这在我 return Ok ()
之前工作正常,它编译并且应该是完全有效的。
不过Thoth.Json不是很喜欢:
Cannot generate auto encoder for Microsoft.FSharp.Core.Unit. Please pass an extra encoder.
如何检查 result
是否为 unit
或使自动编码器处理 unit
?
我今天遇到了同样的问题,通过创建自定义 Encoder<'T>
和 Decoder<T>
解决了这个问题。有趣的是,一个月前这还不是必需的,我发誓我没有更新任何东西。
这是编码器的样子,您可以使用任何 JSON 作为 return 值。
open Thoth.Json.Net
module UnitEncoder =
let encoder = fun _ -> JsonValue.Parse("null")
let decoder = fun _ _ -> Ok ()
你可以这样定义序列化器
let extraCoders =
Extra.empty
|> Extra.withDecimal
|> Extra.withCustom UnitEncoder.encoder UnitEncoder.decoder
let serializer = Thoth.Json.Giraffe.ThothSerializer(extra = extraCoders)
并照常将其注册为服务
services.AddSingleton<Giraffe.Serialization.Json.IJsonSerializer>(CN.ReportingServices.API.Serialization.serializer) |> ignore