相关疑难解决方法(0)

F#,Json.NET 6.0和WebApi - 记录类型的序列化

Json.NET 6.0.1为记录和受歧视的联合添加了F#支持.当使用Json.NET序列化F#记录类型时,我现在可以获得格式良好的JSON.

序列化完成如下:

let converters = [| (new StringEnumConverter() :> JsonConverter) |]
JsonConvert.SerializeObject(questionSet, Formatting.Indented, converters)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试通过用C#编写的ASP.NET WebApi 5.0服务公开我的F#类型时,序列化的JSON包含所有属性的@ -sign infront.@ -sign来自记录类型的内部支持字段(这曾经是Json.Net和F#的已知问题).

但是 - 因为我使用的是Json.NET的更新版本,结果应该与调用JsonConvert时的结果相同吗?或者JsonConvert表现得JsonTextWriterJsonTextReader?不同?

据我从读讲JsonMediaTypeFormatter在的WebAPI源JsonTextWriterJsonTextReader所使用的的WebAPI.

serialization f# json.net asp.net-web-api

14
推荐指数
2
解决办法
1904
查看次数

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

我正在 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吗?

谢谢

f# json azure azure-functions

5
推荐指数
1
解决办法
407
查看次数