c# - 将字符串生成器转换为 json 字符串

标签 c# jquery json

我想使用 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/

相关文章:

C# ASP.NET 在下拉列表更改的 post 方法中传递模型

c# - MVVM中层的作用

javascript - 如何在剑道网格中添加带有预定义数据的新行?

javascript - jQuery 将 td 附加到动态创建的 tr

javascript - 访问 json 数据时出现问题

java - 如何根据数据库数据验证 Jmeter JSON 响应

javascript - 我如何使用 jquery 读取简单的 json 结果以及如何发布新结果

c# - 根据图像大小动态分配水印文本大小c#

c# - 使用 JsonConvert.SerializeObject 序列化派生列表

javascript - 页面转换后在 jQuery Mobile 1.4.3 中打开弹出窗口