将sqlprovider输入的对象转换为json字符串

问题描述:

我试图没有成功将sqlprovider提供的类型转换为json。将sqlprovider输入的对象转换为json字符串

我有一个方法:

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

然后我Newtonsoft.Json称其为这样:

JsonConvert.SerializeObject(getAll()) 

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

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

我想我失去了一些东西基本(希望))

+0

你可以尝试'JsonConvert.SerializeObject(Array.ofSeq(getAll())''? –

+0

是的,我已经尝试过,并试图用'|> Seq.toArray'管道查询。两者都没有帮助,结果相同。 –

+0

它“为我工作”。那是在我测试它的条件下。 MS SQL,随机表,从该表中获取所有记录并运行“您的”getAll()。你有什么版本的牛顿软件?我有9.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它:字符串=
“[{” 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}]”

+0

这肯定是工作,但有点类型提供者的目的。谢谢@ s952163的研究。 –