【发布时间】:2017-09-06 19:46:44
【问题描述】:
我能否请教一些关于如何实现以下目标的指导:
我有两张桌子。表1和表2。
表1:
id | Link | Date
123 | Example | 01/01/2017
表2:
id | Description | Name | Email
123 | Example edges on corners | Jim | Jim@example.com
123 | damage to corner | Fred | Fred@example,com
我正在使用 SQL 语句将表 2 连接到表 1。然后将结果转换为 JSON 对象。
C# 代码
DataTable dt = new DataTable();
using (SqlCommand cmd = new SqlCommand("SELECT Table1.ID, Table1.Link, Table1.Date, Table2.Description, Table2.Name, Table2.Email FROM Table1 LEFT JOIN Table2 ON Table1.ID = Table2.ID", con))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
if (col.ColumnName == "Link")
{
string escapeChar = dr[col].ToString().Replace(@"\", @"");
row.Add(col.ColumnName, escapeChar);
}
else if (col.ColumnName == "Date")
{
DateTime formatDate = DateTime.Parse(dr[col].ToString());
row.Add(col.ColumnName, formatDate.ToString("dd/MM/yyyy"));
}
else
{
row.Add(col.ColumnName, dr[col]);
}
}
rows.Add(row);
}
return serializer.Serialize(rows);
}
}
结果是:
[
{
"ID": "123",
"Link": "example",
"Date":"01/01/2017",
"Description": "round edges on corners",
"Name": "Jim",
"Email": "Jim@example.com"
},
{
"ID": "123",
"Link": "example",
"Date":"01/01/2017",
"Description": "damage to corner",
"Name": "Fred",
"Email": "Fred@example,com"
}
]
我需要的是:
[
{
"ID": "123",
"Link": "example",
"Date": "01\/01\/2017",
"Descriptions": [
{
"Description": "round edges on corners",
"Name": "Jim",
"Email": "Jim@example.com"
},
{
"Description": "round edges on corners ",
"Name": "Fred",
"Email": " Fred @example.com"
}
]
}
]
表 2 中基本上有两个条目,表 1 中的 ID 为 123。我怎样才能达到上述结果?提前谢谢你。
【问题讨论】:
-
请标记您的 DBMS。
-
JavaScriptSerializer 没有给您太多控制权。我建议使用 JSON.NET 和 LINQ to JSON 来允许您直接生成所需的特定 JSON(序列化器使简单的案例变得容易,但如果您需要特定格式,它们比自己做的要多得多)。
-
感谢您提供的链接,我会尝试这种方法
标签: c# json sql-server-2012