我想使用Fable.JsonConverter。
我的测试代码(几乎复制this)FableJson.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
我该怎么办?
答案 0 :(得分:3)
见这里:http://fable.io/docs/interacting.html#json-serialization
在客户端,您应该使用Fable.Core.JsInterop
函数toJson
和ofJson
。
Fable.JsonConverter
仅适用于服务器端。它使用Newtonsoft.Json
,这是一个不在浏览器中运行的.NET库。您得到的编译错误是因为Fable不知道如何将Newtonsoft.Json
函数调用转换为JavaScript。
当您使用在一个运行时(例如.NET)中运行的语言并且还编译成另一个运行时(例如JS)时,这可能会令人困惑,但您应该尝试在所有的代码正在运行,因此它可以访问。
答案 1 :(得分:2)
@Maslow是正确的,在寓言2中,我们删除了Fable.JsonConverter,以支持社区创建的库。
Thoth.Json与Thoth.Json.Net互为补充,使您可以在后端使用相同的API。
我认为Fable.SimpleJson也为后端提供支持,但是我不确定。
您可以使用JavaScript本机API Fable.Core.JS.JSON.stringify
和Fable.Core.JS.JSON.parse(x)
,但是必须使用unbox
/ cast强制使用不安全且容易破坏的数据类型。
答案 2 :(得分:1)
接受的答案不再有效。对于较新的寓言,我唯一能找到的是Fable.Core.JS.JSON.stringify
,它调用了浏览器的内置序列化器。
另外Fable.Core.JS.JSON.parse(x)
返回obj
。