2014-02-14 80 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请看我更新的答案。 –