在 Azure Functions 中以 JSON 形式返回 F# 记录类型

vga*_*tes 5 f# json azure azure-functions

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

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

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

看起来这是由默认序列化程序引起的(将F# 记录类型序列化为JSON 包括每个属性后的 '@' 字符)。

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

req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(y));
Run Code Online (Sandbox Code Playgroud)

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

"{\"Gender\":\"Woman\",\"Frequency\":17,\"Percentage\":100}"
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Dav*_*peš 1

我不认为你可以使用 JSON.Net (会很好),因为 AzureFunctions 基础设施似乎是数据合约序列化器

我刚刚按照将 F# 记录类型序列化为 JSON 在每个属性后包含“@”字符实现了修复,如果比您希望的有点笨拙,它对我有用。

我也在努力解决这个问题,你让我朝着正确的方向前进 - 谢谢

#r "System.Runtime.Serialization"

open System.Runtime.Serialization

[<DataContract>]
type SearchItem = {
    [<field: DataMember(Name="Gender")>]
    Gender: string
    [<field: DataMember(Name="Frequency")>]
    Frequency: int
    [<field: DataMember(Name="Percentage")>]
    Percentage: float
} 
Run Code Online (Sandbox Code Playgroud)