Знает ли 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?

Ответы на вопрос(3)

Ваш ответ на вопрос