我从 Suave 和 F# 开始。
我正在尝试在我的 web 部件中传递一个 json 序列化对象以在我的响应中获取它。
在 php 中我有这个
<?php
header('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Headers:Content-Type, Accept');
header('Access-Control-Allow-Methods:GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Origin:*');
?>
{
"player1Key":"hdegftzj25",
"gameKey":"aegfhzkfszl74852"
}
这样我就得到了我的 json 对象,然后我尝试对 Suave 和 Newtonsoft.Json 做同样的事情
type gameCreate= {
player1Key : string
gameKey: string
}
let create= { player1Key = "BadBoys2"; gameKey = "zLUGgtrht4456" }
let json = Newtonsoft.Json.JsonConvert.SerializeObject(create)
//OK (acc |> Json.serialize |> Json.format )
let php =
request (fun r ->
match r.queryParam "playerName" with
| Choice1Of2 name -> OK (movies |> Json.serialize(json) |> Json.format(json))
//|> Response.response(Json.toJson(info))
//|> OK
| Choice2Of2 msg -> BAD_REQUEST msg)
let webPart =
choose [
path "/" >=> (OK "Home")
path "/elm/api/create.php" >=> php
]
startWebServer defaultConfig webPart
因此,我可以创建并序列化一个 json 对象,但我不知道如何在我的 Web 部件中将其作为 http 响应传递,并且使用上面的代码,我在 let php 中的表达式类型上不断收到错误
看起来你已经引入了太多的 Json 序列化库 - 你似乎混合了 Json.NET 和 Chiron (在教程中使用),但没有太大效果......
让我们退后一步。 Suave 附带了自己的 Json 序列化模块,因此您只需使用它就可以得到一些东西。它看起来是这样的:
let php =
request (fun r ->
match r.queryParam "playerName" with
| Choice1Of2 name ->
let json : string =
create
// this comes from Suave.Json, gives you a byte array
|> Json.toJson
// converts the byte array into a string
|> System.Text.Encoding.UTF8.GetString
OK json
| Choice2Of2 msg -> BAD_REQUEST msg)
现在,如果您愿意,您可以替换Json.toJson
使用 Newtonsoft Json.NET 或 Chiron 实现进行调用(但希望不是两者的混合)。只要类型一致,就应该没问题。
特别是对于凯龙星,你错过了ToJson
您想要序列化的类型的静态成员(这是您的教程确实提到的内容)。 Json.NET 有一个通用的序列化函数,可以生成与记录模式相对应的 json,因此开箱即用更容易一些,但如果需要,还需要更多的工作来自定义输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)