2017-08-23 116 views
-2

我有檢索以下格式設置SQL結果的C#應用​​程序:轉換SqlDataReader的結果,以JSON,嵌套JSON對象

customer_id  date_registered  date_last_purchase  loyalty_points 
1    2017-01-01   2017-05-02    51 
2    2017-01-23   2017-06-21    124 
... 

我怎樣才能將它轉換爲一個JSON字符串,使得第一列(customer_id)是一個關鍵字,並且所有其他後續列都是每個客戶ID的嵌套JSON對象中的值?

例子:

{ 
     1: { 
      date_registered: '2017-01-01', 
      date_last_purchase: '2017-05-02', 
      loyalty_points: 51, 
      ... 
     }, 
     2: { 
      date_registered: '2017-01-23', 
      date_last_purchase: '2017-06-21', 
      loyalty_points: 124, 
      ... 
     }, 
     ... 
} 

此外date_registereddate_last_purchaseloyalty_points,有可能在未來的其他列,所以我不想把這些列名明確。因此,我已經使用下面的代碼來獲取列名,但是在此之後我被卡住了。

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); 

var columns = new List<string>(); 

for (var i = 0; i < sqlDataReader.FieldCount; i++) 
{ 
    columns.Add(sqlDataReader.GetName(i)); 
} 

while (sqlDataReader.Read()) 
{ 
    rows.Add(columns.ToDictionary(column => column, column => sqlDataReader[column])); 
} 
+0

'我怎樣才能將其轉換爲JSON字符串'我沒有看到你的問題,以實現這一點的任何嘗試。 –

回答

1

你可以使用類似這樣的數據讀取器轉換爲Dictionary<object, Dictionary<string, object>>,然後使用Json.NET將其轉換成JSON:

var items = new Dictionary<object, Dictionary<string, object>>(); 
while (sqlDataReader.Read()) 
{ 
    var item = new Dictionary<string, object>(sqlDataReader.FieldCount - 1); 
    for (var i = 1; i < sqlDataReader.FieldCount; i++) 
    { 
     item[sqlDataReader.GetName(i)] = sqlDataReader.GetValue(i); 
    } 
    items[sqlDataReader.GetValue(0)] = item; 
} 
var json = Newtonsoft.Json.JsonConvert.SerializeObject(items, Newtonsoft.Json.Formatting.Indented); 

更新: JSON「名稱」總是字符串,因此使用objectGetValue作爲密鑰。

+0

這很好,謝謝! – user2181948