在 Suave 中映射 json 输入但不输出

Map json input but not output in Suave

Suave.Json.mapJson 将输入 JSON 映射到函数中的对象,然后将函数的输出映射到 JSON.

问题是我对它映射到我的函数的方式很满意,但我需要 return 一个 json 字符串响应,而不是将我的输出序列化为 [=19] =] 对我来说。我该怎么做?

目前我正在将我的输出序列化两次。到目前为止我的代码:

let executeQuery : Query -> string = //Query is my deserialised json input, the return value is a json string
let app = POST >=> path "/graphql" >=> Json.mapJson executeQuery >=> setMimeType "application/json; charset=utf-8"
startWebServer defaultConfig app

如果您查看 Suave source code,您会发现 mapJson 对于 mapJsonWith fromJson toJson 是 shorthand。 fromJsontoJson 函数是默认的 JSON 反序列化器和序列化器(分别),但您可以创建自己的反序列化器 - 或者只使用 id 表示 "map this direction without changing it".例如,

let oneWayMapJson = mapJsonWith fromJson id

请注意,我尚未对此进行测试,只是将其输入 Stack Overflow 答案框中,因此可能需要进行一些调整。我现在没有时间详细说明这个答案,但是如果您需要比这个更简单的答案更多的帮助,请告诉我,我会在明天的某个时候尽力为您提供更多帮助。