簡體   English   中英

無法為Microsoft.FSharp.Core.Unit生成自動編碼器。 請通過一個額外的編碼器

[英]Cannot generate auto encoder for Microsoft.FSharp.Core.Unit. Please pass an extra encoder

我創建了一個幫助程序函數,用於從我的Giraffe項目返回Thoth.Json樣式的json,該Result<'a,'b>采用Result<'a,'b>並返回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 -> ...

直到我返回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作為返回值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM