我想使用C#从SQL Server数据库获取数据。我试图从字符串生成器获取一个json字符串。我试着这样:
public string GetData()
{
using (SqlConnection con = new SqlConnection(this.Connection))
{
con.Open();
SqlCommand command = new SqlCommand("Select TITLE, DURATION, STATUS, TYPE from PROJECTS ", con);
StringBuilder sb = new StringBuilder();
sb.Append("{");
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
var k = reader.GetString(3);
if (k == "M")
{
sb.Append("main");
sb.Append("{");
sb.Append("sub:[]");
sb.Append("Tittle:");
sb.AppendFormat("{0}", reader["TITTLE"]);
}
if (k == "S")
{
sb.Append("sub");
sb.Append("{");
sb.Append("task:[]");
sb.Append("Tittle:");
sb.AppendFormat("{0}", reader["TITTLE"]);
}
if (k == "T")
{
sb.Append("task");
sb.Append("{");
sb.Append("Tittle:");
sb.AppendFormat("{0}", reader["TITTLE"]);
}
};
}
sb.Append("}");
sb.AppendLine();
return sb.ToString();
}
}
现在我得到了像
这样的字符串sb = {{main{sub:[]Tittle:newsub{task:[]Tittle:new1task{Tittle:new2}
但我需要的字符串如下:
[{"main":{"sub":[{"task":[{"tittle":"new2""}],"tittle":"new1","}],"tittle":"new","}}]
表示:我的主标题是new和sub tittle new1,任务标题new2。我需要对代码进行哪些更改才能获得所需的json字符串?
答案 0 :(得分:0)
您的代码存在一些问题:
要成为有效的JSON字符串,必须使用双引号"
括起属性名称,因此您必须执行sb.Append("\"main\"");
每个属性名称后面都必须跟一个冒号:
,因此您必须执行sb.Append("\"main\": ");
您正在处理嵌套结构,包含对象的数组,这些数组本身包含数组......在添加了所有项目之后,您只能添加数组的右括号]
。所以做一些像
sb.Append("\"sub\": [");
//here you add the subitems in a loop
sb.Append("]");
为了能够这样做,您将必须跟踪您当前打开的结构,并且您将查询以确切的所需顺序返回行(即首先是主要标题,然后是第一个包含sub,然后是该子包含的任务,然后是第二个子,然后是任务......)
您也永远不会关闭更高级别的开放式大括号{
。这同样适用于数组。如果添加对象,则必须添加其所有内容,然后添加结束}
大括号。
通常,我建议不要自己创建JSON,而是使用像JSON.net这样的框架。您可以根据需要构建集合,然后调用框架序列化方法,该方法将生成有效的json字符串。