我正在使用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
取值
答案 0 :(得分:1)
On Leafs建议(见上面的评论),我将QueryData的类型定义更改为
[<CLIMutable>]
[<JsonObject(MemberSerialization=MemberSerialization.OptOut)>]
type QueryData = {
columns: IEnumerable<QueryColumn>
data: IEnumerable<IDictionary<string,string>>
}
它工作正常。