Как скомпилировать Fable.JsonConverter
Я хотел бы использовать Fable.JsonConverter.
Мой тестовый код (почти скопируйте это) 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
Что я должен делать?
1 ответ
Смотрите здесь: http://fable.io/docs/interacting.html
На стороне клиента вы должны использовать Fable.Core.JsInterop
функции toJson
а также ofJson
,
Fable.JsonConverter
только для серверной части. Оно использует Newtonsoft.Json
Это библиотека.NET, которая не работает в браузере. Вы получаете ошибку компиляции, потому что Fable не знает, как конвертировать Newtonsoft.Json
вызовы функций в JavaScript.
Это может сбивать с толку, когда вы работаете с языком, который работает в одной среде выполнения (например,.NET), а также компилируется в другой (например, JS), но вы должны попытаться сохранить четкую мысленную модель, в которой выполняется весь ваш код и, следовательно, к чему он имеет доступ.
@Maslow прав, в Fable 2 мы удалили Fable.JsonConverter в пользу библиотеки, созданной сообществом.
- Thoth.Json предлагает опыт, подобный Elm, где вы можете декодировать JSON вручную или автоматически в зависимости от ваших предпочтений. Эта библиотека также предлагает хорошее сообщение об ошибке
- Fable.SimpleJson библиотека для разбора и преобразования JSON в проектах Fable
Thoth.Json дополняется Thoth.Json.Net, чтобы вы могли использовать тот же API на бэкэнде.
Я думаю, что Fable.SimpleJson также предлагает поддержку серверной части, но я не уверен.
Вы можете использовать собственный API JavaScript Fable.Core.JS.JSON.stringify
а также Fable.Core.JS.JSON.parse(x)
но вам придется использовать unbox
/cast, чтобы указать тип ваших данных, который небезопасен и может легко сломаться.
Принятый ответ больше не действителен. Для более новой Fable единственное, что мне удалось найти, этоFable.Core.JS.JSON.stringify
который вызывает встроенный сериализатор браузера. ТакжеFable.Core.JS.JSON.parse(x)
который возвращается obj
.