F# 如何处理FSharp.Data JsonProvider中缺少的属性?

F# 如何处理FSharp.Data JsonProvider中缺少的属性?,f#,f#-data,fsharp.data.typeproviders,F#,F# Data,Fsharp.data.typeproviders,假设有这样一个提供商: type ColorProvider = JsonProvider<""" { "id": "b35b5bcf-761a-4e50-9ff0-4c7de7dd0e5d", "color": "Red" } """> type ColorProvider=JsonProvider 如果其中一个对象根本没有“颜色”属性,则尝试打印集合中的颜色将失败: dataAccess.QueryAsEnumerable<string>("SEL

假设有这样一个提供商:

type ColorProvider = JsonProvider<"""
{
    "id": "b35b5bcf-761a-4e50-9ff0-4c7de7dd0e5d",
    "color": "Red"
}
""">
type ColorProvider=JsonProvider
如果其中一个对象根本没有“颜色”属性,则尝试打印集合中的颜色将失败:

dataAccess.QueryAsEnumerable<string>("SELECT Data FROM Objects")
|> Seq.map ColorProvider.Parse
|> Seq.iter (fun item -> printfn "%A" item.Color)
dataAccess.QueryAsEnumerable(“从对象中选择数据”)
|>Seq.map ColorProvider.Parse
|>Seq.iter(趣味项目->打印“%A”项目颜色)
有一个JsonValue.Null可与之比较,但在本例中,它不是Null,只是缺少该属性

如何过滤掉没有颜色属性的项目?

好的,找到了:

dataAccess.QueryAsEnumerable(“从对象中选择数据”)
|>Seq.map ColorProvider.Parse
|>序号:iter(趣味项目->
将item.JsonValue.TryGetProperty(“颜色”)与
|某些颜色->打印fn“%A”颜色
|无->打印fn“%s”-
)

您使用
TryGetProperty
的解决方案有效,但有更好的方法-您可以使用一个更具代表性的示例,其中两个记录中的一个缺少
color
属性:

type ColorProvider = JsonProvider<"""[
  { "id": "b35b5bcf", "color": "Red" },
  { "id": "b2542345" } ]""", SampleIsList=true>

这是我第一次尝试的,但是我缺少了“SampleIsList=true”选项,所以失败了。很高兴知道!
type ColorProvider = JsonProvider<"""[
  { "id": "b35b5bcf", "color": "Red" },
  { "id": "b2542345" } ]""", SampleIsList=true>
dataAccess.QueryAsEnumerable<string>("SELECT Data FROM Objects")
|> Seq.map ColorProvider.Parse
|> Seq.iter (fun item -> printfn "%s" (defaultArg item.Color " - "))