将sqlprovider类型对象转换为json字符串

时间:2016-09-21 08:54:54

标签: mysql f# json.net type-providers

我正在努力将sqlprovider提供的类型转换为json。

我有一个方法:

let getAll () =
   query {
      for c in db.MyDb.Table do
      select c
   }

然后我用Newtonsoft.Json称呼它:

JsonConvert.SerializeObject(getAll ())

我得到的是一个带有空对象的字符串:[{}]

如果我手动创建一个类型,它可以正常工作。如果我选择基本类型和单个属性(例如c.something),它也可以。

我想我错过了一些基本的东西(希望如此;))

1 个答案:

答案 0 :(得分:1)

Issue 212中提到了这种用法。因为生成的SqlEntity类型不是Json序列化程序所知道的,所以它无法直接处理它。解决这个问题的一种方法是为表定义记录类型(对于大型表来说可能不太合适)。例如:

type DataRec' = {
    DT:DateTime 
    ADAY:String 
    ID:System.Int64
    }

let qry = query { for row in table1 do
                  select row} |> Seq.map (fun x -> x.MapTo<DataRec'>())

JsonConvert.SerializeObject(qry |> Seq.toList)
  

val it:string =
  “[{” DT “:” 2016-09-27T00:00:00" , “ADAY”: “星期二”, “ID”:8},{ “DT”: “2016-09-26T00:00:00” “ADAY”: “星期一”, “ID”:9},{ “DT”: “2016-09-25T00:00:00”, “ADAY”: “星期日”, “ID”:10},{” DT “:” 2016-09-24T00:00:00" , “ADAY”: “星期六”, “ID”:11},{ “DT”: “2016-09-27T00:00:00”, “ADAY” : “星期二”, “ID”:12},{ “DT”: “2016-09-24T00:00:00”, “ADAY”: “星期六”, “ID”:13},{ “DT”:” 2016-09-24T00:00:00" , “ADAY”: “星期六”, “ID”:14},{ “DT”: “2016-09-23T00:00:00”, “ADAY”: “星期五” , “ID”:15},{ “DT”: “2016-09-25T00:00:00”, “ADAY”: “星期日”, “ID”:16},{ “DT”:“2016-09- 26T00:00:00" , “ADAY”: “星期一”, “ID”:17}]“