Json Type Provider:在函数中使用type作为参数

Jam*_*xon 6 f# f#-data

我有一个像这样的json文档:

{"index":1,"addressOne":"1506 WAKE FOREST RD","addressTwo":"RALEIGH NC 27604-1331","addressThree":"","assessValue":"$ 34,848","id":" c0e931de-68b8-452e-8365-66d3a4a93483","_"":"pmVVALZMZAEBAAAAAAAAAA ==","_ ts":1423934277,"_ self":"dbs/pmVVAA ==/colls/pmVVALZMZAE =/docs/pmVVALZMZAEBAAAAAAAAAA == /" ,"_标签":"\"0000c100-0000-0000-0000-54df83450000 \"","_附件":"附件/"}

然后我通过类型提供程序加载它,如下所示:

type HouseValuation = JsonProvider<"../data/HouseValuationSample.json">
Run Code Online (Sandbox Code Playgroud)

当我尝试将HouseValuation用作参数的一部分时,它将被强制转换为Object:

在此输入图像描述

我究竟做错了什么?

提前致谢

Tom*_*cek 10

类型HouseValuation是一种根类型,仅用于托管ParseLoad方法,但它不是表示实际解析文档的类型.如果你看一下Loador 的类型Parse,你会看到这样的东西:

Load : string -> JsonProvider<"...">.Root
Run Code Online (Sandbox Code Playgroud)

因此,实际解析文档的类型Root是主提供类型下的嵌套类型HouseValuation.然后该函数应该HouseValuation.Root作为参数:

type HouseValuation = JsonProvider<" ... ">

let createSchoolAssignmentSearchCriteria(houseValuation:HouseValuation.Root) = 
  houseValuation.AddressOne
Run Code Online (Sandbox Code Playgroud)

键入时,HouseValuation.您将看到两个静态方法以及所有嵌套类型(尽管在此示例中,只有一种记录类型).