如何编译Fable.JsonConverter

时间:2018-01-01 23:30:13

标签: f# fable-f#

我想使用Fable.JsonConverter。

我的测试代码(几乎复制thisFableJson.fs位于下方,

module FableJson

open Newtonsoft.Json

// Always use the same instance of the converter
// as it will create a cache to improve performance
let private jsonConverter = Fable.JsonConverter() :> JsonConverter

// Serialization
let toJson value =
    JsonConvert.SerializeObject(value, [|jsonConverter|])

// Deserialization
let ofJson<'T> json =
    JsonConvert.DeserializeObject<'T>(json, [|jsonConverter|])

paket.dependencies文件添加了nuget Fable.JsonConverter

source https://nuget.org/api/v2
storage:none

clitool dotnet-fable
nuget Fable.Core
nuget Fable.Import.Browser
nuget Fable.JsonConverter

src/paket.references文件添加了Fable.JsonConverter

dotnet-fable
Fable.Core
Fable.Import.Browser
Fable.JsonConverter

但是无法编译。

~~~ snip ~~~
ERROR in ./src/FableJson.fs
d:/SRC/Repos/Fable/testJsonConverter/src/FableJson.fs(11,4): (11,57) error FABLE: Cannot find replacement for Newtonsoft.Json.JsonConvert::SerializeObject
 @ ./src/App.fs 6:0-48
 @ ./src/testJsonConverter.fsproj
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./src/testJsonConverter.fsproj

ERROR in ./src/FableJson.fs
d:/SRC/Repos/Fable/testJsonConverter/src/FableJson.fs(15,4): (15,62) error FABLE: Cannot find replacement for Newtonsoft.Json.JsonConvert::DeserializeObject
 @ ./src/App.fs 6:0-48
 @ ./src/testJsonConverter.fsproj
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./src/testJsonConverter.fsproj

ERROR in ./src/FableJson.fs
d:/SRC/Repos/Fable/testJsonConverter/src/FableJson.fs(7,28): (7,49) error FABLE: Cannot find replacement for Fable.JsonConverter::.ctor
 @ ./src/App.fs 6:0-48
 @ ./src/testJsonConverter.fsproj
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./src/testJsonConverter.fsproj

我该怎么办?

3 个答案:

答案 0 :(得分:3)

见这里:http://fable.io/docs/interacting.html#json-serialization

在客户端,您应该使用Fable.Core.JsInterop函数toJsonofJson

Fable.JsonConverter仅适用于服务器端。它使用Newtonsoft.Json,这是一个不在浏览器中运行的.NET库。您得到的编译错误是因为Fable不知道如何将Newtonsoft.Json函数调用转换为JavaScript。

当您使用在一个运行时(例如.NET)中运行的语言并且还编译成另一个运行时(例如JS)时,这可能会令人困惑,但您应该尝试在所有的代码正在运行,因此它可以访问。

答案 1 :(得分:2)

@Maslow是正确的,在寓言2中,我们删除了Fable.JsonConverter,以支持社区创建的库。

  • Thoth.Json提供类似Elm的体验,您可以根据自己的喜好手动或自动解码JSON。该库还提供了很好的错误消息
  • Fable.SimpleJson一个用于在寓言项目中解析和转换JSON的库

Thoth.Json与Thoth.Json.Net互为补充,使您可以在后端使用相同的API。

我认为Fable.SimpleJson也为后端提供支持,但是我不确定。

您可以使用JavaScript本机API Fable.Core.JS.JSON.stringifyFable.Core.JS.JSON.parse(x),但是必须使用unbox / cast强制使用不安全且容易破坏的数据类型。

答案 2 :(得分:1)

接受的答案不再有效。对于较新的寓言,我唯一能找到的是Fable.Core.JS.JSON.stringify,它调用了浏览器的内置序列化器。 另外Fable.Core.JS.JSON.parse(x)返回obj