2014-02-14 77 views
0

我想數據庫中的數據轉換成JSON,但我得到通過使用代碼使用JavaScriptSerializer這個網站是這樣轉換數據庫數據轉換成JSON

[{"Yes":6,"No":1,"Maybe":4}]. 

我已經命名爲Yes三列的數據庫表, NoMaybe,但是我要像一個JSON格式:

[{"name":"Yes","data":6},{"name":"No","data":2},{"name":"Maybe","data":3}]. 

指如何將它轉換成鍵:值對VB?

我的代碼是:

Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer() 
Dim rows As New List(Of Dictionary(Of String, Object))() 
Dim row As Dictionary(Of String, Object) 
For Each dr As DataRow In dt.Rows 
    row = New Dictionary(Of String, Object)() 
    For Each col As DataColumn In dt.Columns 
     row.Add(col.ColumnName, dr(col)) 
    Next 
    rows.Add(row) 
Next 
json_data = serializer.Serialize(rows) 
+0

我收到錯誤「已經添加了具有相同密鑰的項目」。它不允許再次使用相同密鑰插入數據 –

回答

1

只是改變

For Each col As DataColumn In dt.Columns 
    row.Add("name", col.ColumnName) 
    row.Add("data", dr(col)) 
+0

我收到錯誤「已添加具有相同密鑰的項目」。它不會不允許再次使用相同的密鑰插入數據 –

+0

但這是合乎邏輯的,因爲它是一個字典,如果你不得不重複鍵(我不明白爲什麼)只是使用一個鍵和值的列表 - KeyValuePai –

-1

的問題不是在代碼中。問題在於數據庫模式開始時不好。

壞:

+---------+--------+-----------+ 
| Yes  | No  | Maybe  | 
+---------+--------+-----------+ 
|  6 |  2 |   4 | 
+---------+--------+-----------+ 

好:

+---------+--------+ 
| Name | Data | 
+---------+--------+ 
| Yes  |  6 | 
+---------+--------+ 
| No  |  2 | 
+---------+--------+ 
| Maybe |  4 | 
+---------+--------+ 

編輯

@Downvoter:假設你想添加一個新屬性 「也許」 以後。

+---------+--------+ 
| Name | Data | 
+---------+--------+ 
| Yes  |  6 | 
+---------+--------+ 
| No  |  2 | 
+---------+--------+ 
| Maybe |  4 | 
+---------+--------+ 
| Perhaps |  9 | 
+---------+--------+ 

你會如何去做在原表中做到這一點?

您可能猜到了:通過更改數據庫結構以適應業務模型。

+0

同樣的問題與不同數據或不是「dummie」數據應該存在,數據庫上完全有效的結構需要不同的業務模型結構,所以我知道改變數據庫結構以適應業務模型是一個不好的答案。 – Bardo

+0

@Bardo「完美有效」並不等於「完美」。根據我們對問題域的瞭解,更改表定義是正確的解決方案。 –

+0

@Bardo請看我更新的答案。 –