使用Web API和FSharp的Json的结构类型

时间:2014-01-09 10:21:48

标签: json web-services f#

我正在使用Web API和fsharp创建一个Web服务。从Web服务我将从查询返回数据。 (请注意,我使用的是自定义查询结果类型,而不是标准.Net类型之一,如数据表等。)数据可能是许多不同的“形状”(即不同数量的列等等)。

我想要制作的一些样本json,例如

{    
  columns :       
    [
      { field: "FirstName",     title: "First" }, 
      { field: "LastName",      title: "Last" }, 
      { field: "EmailAddress",  title: "Email" },
      { field: "Other",         title: "Other" },
    ],
  data :       
    [
      { FirstName: "A", LastName: "B", EmailAddress: "a@b.c", Other: "zzz" }, 
      { FirstName: "C", LastName: "D", EmailAddress: "c@d.c", Other: "zzz" }, 
      { FirstName: "E", LastName: "F", EmailAddress: "e@f.c", Other: "zzz" } 
    ]      
}

但正如我所说,列数将会随着名称,数据类型等而变化。

到目前为止,这些是我的类型。

[<CLIMutable>]
[<JsonObject(MemberSerialization=MemberSerialization.OptOut)>]
type QueryColumn = {
    field: string
    title: string
}

[<CLIMutable>]
[<JsonObject(MemberSerialization=MemberSerialization.OptOut)>]
type QueryData = {
    columns: IEnumerable<QueryColumn> 
    data: IEnumerable<IEnumerable<string * string>>    
}

上面的类型成功地为columns元素生成了正确的json结构,但不是数据。我想知道如何最好地构造“数据”类型以生成我所追求的json结构。我开始怀疑是否需要类型提供程序,以便我可以动态计算查询结果的结构。

我们将非常感激地收到任何建议。

THX

取值

1 个答案:

答案 0 :(得分:1)

On Leafs建议(见上面的评论),我将QueryData的类型定义更改为

[<CLIMutable>]
[<JsonObject(MemberSerialization=MemberSerialization.OptOut)>]
type QueryData = {
  columns: IEnumerable<QueryColumn> 
  data: IEnumerable<IDictionary<string,string>>    
}

它工作正常。