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

3zwjbxry  于 2022-12-01  发布在  C#
关注(0)|答案(2)|浏览(221)

我试图用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);
            }
        }
    }         
}

`
``
虽然这个输出会给我
cl.类别=['comA','comB','comC'] cl.数据=['1,2,3',' 4,5,6','7,8,9']

i2byvkas

i2byvkas1#

如果你想得到类似[{ name: 'comA', data: [1,2,3] }, { name: 'comB', data: [4,5,6] }, { name: 'comC', data: [7,8,9] }]的输出,你需要以不同的方式序列化你的对象。因为你想在JSON中得到一个数字列表而不是字符串,你需要在类定义中把数字表示为List。类似这样的方式应该可以工作:

[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;         
}
3pmvbmvn

3pmvbmvn2#

如果你想要一个包含一组类别/数据对的JSON字符串,你将需要序列化一个对象。
另外,如果你的Data对象是一个字符串,它将被序列化为一个字符串(即“1,2,3”而不是[1,2,3])。如果你真的想解决这个问题,你将需要一个int的集合。

public class ChartLoc
{
    public string Category { get; set; }
    public List<int> Data { get; set; }
}
...
var chartLocs = new List<ChartLoc>();
chartLocs.Add(new ChartLoc { Category = "comA", Data = new List<int> { 1, 2, 3 } });
chartLocs.Add(new ChartLoc { Category = "comB", Data = new List<int> { 4, 5, 6 } });
chartLocs.Add(new ChartLoc { Category = "comC", Data = new List<int> { 7, 8, 9 } });

JavaScriptSerializer jss = new JavaScriptSerializer();
var json = jss.Serialize(chartLocs);

产生的JSON与您正在寻找的内容更加相似...
[{“类别”:“comA”,“数据”:[1,2,3]},{“类别”:“comB”,“数据”:[4,5,6]},{“类别”:“comC”,“数据”:[7,8,9]}]

相关问题