C 主從表轉(zhuǎn)化制定的 json,是將數(shù)據(jù)庫中的主從表數(shù)據(jù)轉(zhuǎn)化為 JSON 格式的一種方案。該方案通常應(yīng)用于 Web 應(yīng)用程序中,大大簡化了前端與后端的數(shù)據(jù)交互。下面我們來具體講解一下這個(gè)方案的實(shí)現(xiàn)方式:
首先,我們需要在后端編寫 SQL 語句,用來查詢主從表數(shù)據(jù),并將查詢結(jié)果存儲在一個(gè)字典對象中。如下所示:
Dictionary<string, object> data = new Dictionary<string, object>(); using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(query, connection)) { SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { string parentKey = reader.GetString(parentKeyColumnIndex); if (!data.ContainsKey(parentKey)) { data[parentKey] = new Dictionary<string, object>() { { "parent", new Dictionary<string, object>() }, { "children", new List<Dictionary<string, object>>() } }; } Dictionary<string, object> parent = (Dictionary<string, object>)data[parentKey]["parent"]; for (int i = 0; i < reader.FieldCount; i++) { string key = reader.GetName(i); if (key != parentKeyColumnName) { parent[key] = reader.GetFieldValue<object>(i); } } if (!reader.IsDBNull(parentKeyColumnIndex)) { Dictionary<string, object> child = new Dictionary<string, object>(); for (int i = 0; i < reader.FieldCount; i++) { string key = reader.GetName(i); if (key == parentKeyColumnName) { child[key] = reader.GetFieldValue<object>(i); } else { child[key] = reader.IsDBNull(i) ? null : reader.GetFieldValue<object>(i); } } ((List<Dictionary<string, object>>)data[parentKey]["children"]).Add(child); } } } }
在 SQL 語句查詢出數(shù)據(jù)存儲到字典對象以后,我們需要將該字典對象轉(zhuǎn)化為 JSON 格式,并將其傳輸?shù)角岸恕^D(zhuǎn)化的過程比較簡單,我們只需要利用 Newtonsoft.Json 這個(gè)第三方庫,調(diào)用其 SerializeObject 方法即可。如下所示:
string json = JsonConvert.SerializeObject(data.Values); return Content(json, "application/json");
上面的代碼將字典對象中的所有值進(jìn)行了序列化,并以 JSON 格式返回給前端。在前端中,我們可以直接使用 JavaScript 將該 JSON 數(shù)據(jù)轉(zhuǎn)換為 JS 對象,并對其進(jìn)行操作。
上一篇python 有趣的編碼
下一篇vue反選事件