在 Azure Functions 中将 F# 记录类型返回为 JSON

2024-02-13

我正在 F# 中创建一个简单的 azure 函数。最后,我返回 JSON 格式的记录类型。我正在做这样的事情:

let y = {Gender = "Woman"; Frequency = 17; Percentage = 100.0}
req.CreateResponse(HttpStatusCode.OK, y);

当我从 Postman 调用该函数时,我得到了这个 JSON{"Gender@":"Woman","Frequency@":17,"Percentage@":100}

看来这是由默认序列化程序引起的(将 F# 记录类型序列化为 JSON 在每个属性后包含“@”字符 https://stackoverflow.com/questions/13037472/serializing-f-record-type-to-json-includes-character-after-each-property).

然后我尝试使用Newtonsoft.Json。现在,代码如下所示:

req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(y));

但现在我使用邮递员得到这个:

"{\"Gender\":\"Woman\",\"Frequency\":17,\"Percentage\":100}"

我想得到这样的回复:{"Gender":"Woman","Frequency":17,"Percentage":100}

我怎样才能得到这个 JSON 响应?除了指定还有其他办法吗DataMemberAttribute?

Thanks


我找到了一个超级简单的方法来解决这个问题!

有一个过载req.CreateResponse()这需要一个JsonMediaTypeFormatter作为第三个参数。这允许我们设置ContractResolver到 Json.Net 提供的一个。

let jsonFormatter = System.Net.Http.Formatting.JsonMediaTypeFormatter()
jsonFormatter.SerializerSettings.ContractResolver <- Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()

return req.CreateResponse(HttpStatusCode.OK, { Foo = "Bar" }, jsonFormatter)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Azure Functions 中将 F# 记录类型返回为 JSON 的相关文章

随机推荐