Знает ли F # о скомпилированных формах своих дискриминационных союзов?
Дискриминированное объединение в F # компилируется в абстрактный класс, и его опции становятся вложенными конкретными классами.
type DU = A | B
DU абстрактен, а DU.A и DU.B конкретны.
С ServiceStack сериализацию типов в строки JSON и обратно можно настроить с помощью функций. Что касается типа DU, здесьКак я мог сделать это в C #.
using ServiceStack.Text;
JsConfig.SerializeFn = v => "A"; // Func
JsConfig.SerializeFn = v => "B"; // Func
JsConfig.DeserializeFn = s =>
if s == "A" then DU.NewA() else DU.NewB(); // Func
Знает ли F # о своих дискриминационных союзах? скомпилированные формы? Как я могу получить тип DU.A в F # во время компиляции?
typeof // compiles
typeof // error FS0039: The type 'A' is not defined
typeof<a> // error FS0039: The type 'A' is not defined
</a>
Я могу достаточно легко зарегистрировать функцию для десериализации в F #.
open System
open ServiceStack.Text
JsConfig.RawDeserializeFn printfn "Hooked"; if s = "A" then A else B)
Можно ли полностью зарегистрировать функции сериализации в F # для конкретных типов DU.A и DU.B?