我想使用 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,副标题是new1,任务标题是new2。我需要对代码进行哪些更改才能获取所需的 json 字符串?
最佳答案
您的代码存在一些问题:
要成为有效的 JSON 字符串,属性名称必须用双引号括起来 "
,因此您必须执行类似 sb.Append("\"main\"") 的操作;
每个属性名称后面都必须跟一个冒号 :
,因此您必须执行类似 sb.Append("\"main\": ");
您正在处理嵌套结构、包含对象的数组,而对象本身又包含数组...您只能在添加数组的所有项目后添加数组的右括号 ]
。所以做类似的事情
sb.Append("\"sub\": [");
//here you add the subitems in a loop
sb.Append("]");
为了能够做到这一点,您必须跟踪当前打开的结构,并且您的查询将按照所需的确切顺序返回行(即首先是主标题,然后是第一个标题)包含子,然后是该子中包含的任务,然后是第二个子,然后是任务...)
您也永远不会关闭更高级别的开大括号{
。此处与数组相同。如果添加对象,则必须添加其所有内容,然后添加右大括号。
一般情况下,我建议不要自己创建 JSON,而是使用像 JSON.net 这样的框架。您可以根据需要构建集合,然后调用框架序列化方法,该方法将生成有效的 json 字符串。
关于c# - 将字符串生成器转换为 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39543036/