FSharp.Data.dll
- компонент времени выполнения FSharp.Data
. Тип-провайдеры генерируют типы для вас во время компиляции и после этого не нужны. Это dll называется: FSharp.Data.DesignTime.dll
.
Вы можете декомпилировать эту dll, но я думаю, что проще взглянуть на исходный код: https://github.com/fsharp/FSharp.Data/blob/master/src/Json/JsonProvider.fs
Что делает поставщик типов, так это то, что он внедряет код и типы, что делает навигацию JSON удобной для вас. Используя такой инструмент, как dnSpy
, можно узнать, что на самом деле происходит
Так пример программы
type Simple = JsonProvider<""" { "name":"John", "age":94 } """>
let f (s: string) =
let s = Simple.Parse s
s.Name
После декомпиляции его на C # с использованием dnSpy
выглядит так:
public static string f(string s)
{
IJsonDocument s2 = (IJsonDocument)JsonDocument.Create(new StringReader(s));
JsonValueOptionAndPath jsonValueOptionAndPath = JsonRuntime.TryGetPropertyUnpackedWithPath(s2, "name");
return JsonRuntime.GetNonOptionalValue<string>(jsonValueOptionAndPath.Path, JsonRuntime.ConvertString("", jsonValueOptionAndPath.JsonOpt), jsonValueOptionAndPath.JsonOpt);
}
Таким образом, строка анализируется в IJsonDocument
, а затем s.Name
превращается в
JsonValueOptionAndPath jsonValueOptionAndPath = JsonRuntime.TryGetPropertyUnpackedWithPath(s2, "name");
return JsonRuntime.GetNonOptionalValue<string>(jsonValueOptionAndPath.Path, JsonRuntime.ConvertString("", jsonValueOptionAndPath.JsonOpt), jsonValueOptionAndPath.JsonOpt);
Код о не нужно FSharp.Data.DesignTime.dll
, поэтому он не включен в сборку.