2016-09-21 45 views
1

我試圖沒有成功將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 ... –

回答

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的研究。 –

相關問題