在 C# 中从 SQL 表结果格式化 JSON

loo*_*ers 2 c# sql serialization json

我尝试按以下方式在 C# 中格式化 JSON。假设我有下表

col1 col2 col3 col4
comA 1 2 3
comB 4 5 6
comC 7 8 9

我希望我的 JSON 输出像这样

[{ name: 'comA', data: [1,2,3]
}, { name: 'comB', data: [4,5,6] }, { name: 'comC', data: [7,8,9] }]

我有以下代码

public class ChartLoc
{
    public string Category { get; set; }
    public string Data{ get; set; }
}

public void myFunc(){
    using (SqlConnection con = new SqlConnection(ConnectionString)
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand("select * from table", con))
        {
            using (SqlDataReader reader = cmd.ExecuteReader())
            {

                List<String> _Category = new List<String>();
                List<String> _Data = new List<String>();

                while (reader.Read())
                {


                    _Data.Add(reader["col2"].ToString() + ',' + reader["col3"].ToString() + ',' + reader["col4"].ToString());

                    if (reader["store"] != DBNull.Value) _Category.Add(reader["col1"].ToString());
                }
                JavaScriptSerializer jss = new JavaScriptSerializer();
                cl.Category = jss.Serialize(_Category); 
                cl.Data = jss.Serialize(_Data);
            }
        }
    }         
}
Run Code Online (Sandbox Code Playgroud)

虽然这个输出会给我

cl.Category = ['comA','comB','comC'] cl.Data = ['1,2,3','4,5,6','7,8,9']

Cam*_*ker 6

如果您想获得类似的输出[{ name: 'comA', data: [1,2,3] }, { name: 'comB', data: [4,5,6] }, { name: 'comC', data: [7,8,9] }],则需要以不同的方式序列化您的对象。由于您需要 JSON 中的数字列表而不是字符串,因此您需要List在类定义中将数字表示为 a 。像这样的东西应该有效:

[Serializable]
public class ChartLoc
{
    public string Category { get; set; }
    public List<int> Data { get; set; }
}

public string myFunc()
{
    string jsonString = "";
    using (SqlConnection con = new SqlConnection(ConnectionString)
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand("select * from table", con))
        {
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                List<ChartLoc> _ChartLoc = new List<ChartLoc>();

                while (reader.Read())
                {
                    ChartLoc chart = new ChartLoc();
                    chart.Data.Add(int.Parse(reader["col2"].ToString()));
                    chart.Data.Add(int.Parse(reader["col3"].ToString()));
                    chart.Data.Add(int.Parse(reader["col4"].ToString()));

                    if (reader["store"] != DBNull.Value) 
                        chart.Category = reader["col1"].ToString();
                    _ChartLoc.Add(chart);
                }
                JavaScriptSerializer jss = new JavaScriptSerializer();
                jsonString = jss.Serialize(_ChartLoc);
            }
        }
    }
    return jsonString;         
}
Run Code Online (Sandbox Code Playgroud)