给定
let inline deserialize<'t> x :'t option =
printfn "Attempting to deserialize %A" typeof<'t>.Name
try
JsonConvert.DeserializeObject<'t>(x)
|> Some
with ex ->
System.Diagnostics.Trace.WriteLine(sprintf "Error deserialization failed:%s" ex.Message)
None
比如返回一个obj list
为null
。不允许FSharpList<_>
为空。如果我不知道't
是什么类型,我该如何询问F#即将返回的类型是否支持null
,以便我可以相应地停止/抛出异常/处理?是否有反射标志或者Microsoft.FSharp.Reflection...
方法可用?
AllowNullLiteral
属性,那么如果您尝试设置let x : TestFClass = null
,它将无法编译。因此,所有依赖于该类型的 F# 程序集都期望它不为 null。因此,在 F# 中定义的类不应为 null。 - Maslow[<CompilationMapping(SourceConstructFlags.ObjectType)>]
因此,您可以查找该属性的存在(没有 AllowNullLiteral属性)作为类型不允许为空的信号。这是比较的Sharplab链接:https://sharplab.io/#v2:DYLgZgzgPg9gDgUwHYAIDKBPCAXBBbAWAChjsNEUBhACgEoUBeYlFlPfAIwQCcVsALAJYQAdAFk6jFHWatiAbQA8AQWDAYAdwByAVzUAZQbm4BDYAD4AuqXIIUutTXoMUAY2AmIEFMgAmQA= - Chester Husk