【问题标题】:Customized JSON data from datatable in c# asp.net webforms来自 c# asp.net webforms 中数据表的自定义 JSON 数据
【发布时间】:2016-04-05 13:51:21
【问题描述】:

我目前正在尝试在项目中为 cal-heatmap js 提供一个 json 文件,手动数据输入它工作正常,但是我无法将数据表转换为实际需要的 json,我使用的格式我目前从下面的代码中得到下面给出的

public void ConvertDataTabletoString()
{
    DataTable dtjson = new DataTable();
    con.Open();
    SqlDataAdapter da = new SqlDataAdapter("select Date, count(id) as co from volunteer Group BY Date Order by Date", con);
    da.Fill(dtjson);
    con.Close();
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    Dictionary<string, object> row;
    foreach (DataRow dr in dtjson.Rows)
    {
        row = new Dictionary<string, object>();

        foreach (DataColumn col in dtjson.Columns)
        {

                row.Add(col.ColumnName, dr[col]);
        }
        rows.Add(row);
    }

它正在生成这样的 JSON 格式

{"Date":"2/15/2016","co":8},
{"Date":"2/24/2016","co":2},
{"Date":"2/25/2016","co":1},
{"Date":"2/6/2016","co":1},
{"Date":"2/7/2016","co":4},
{"Date":"2/8/2016","co":8},
{"Date":"3/19/2016","co":17},
{"Date":"3/21/2016","co":1}

但我希望数据采用以下格式,没有列名和多个括号

{ 
"2/15/2016": 20,
"2/24/2016": 40
}

我不介意您是否也可以继续在文本文件中执行此操作,而不是使用 JSON 序列化

【问题讨论】:

  • 可以在javascript中使用JSON.parse(obj)进行反序列化。为什么你使用JavascriptSerializer而不使用它?
  • WriteLine(string.Format("\"{0}\": {1},", date, num);
  • @stuartd 以及如何将其保存到目录中的文件中?尽管使用了标准选项,但仍然无法完成此操作,您如何写入文件?
  • @JoséFrancisco 您好,感谢您的回复,所以您的意思是我可以继续通过 JSON.parse(obj) 使用相同的结果集?你能想到在这种情况下我该怎么做吗?谢谢
  • 试试这个:var ts = JSON.parse(objJson); var val = ts["日期"];

标签: c# jquery asp.net json


【解决方案1】:

你有两个选择

对于一般情况 => 您拥有的任何列并且您不需要任何列名,那么您可以拥有的有效数据可能如下所示,(列表列表)

[ 
    [row1col1value,row1col2value,row1col3value]
    [row2col1value,row2col2value,row2col3value]
]

你可以像下面这样得到它

    List<List<string>> rows = new List<List<string>>();
    foreach (DataRow dr in dtjson.Rows)
    {
        List<string> row = new List<string>();

        foreach (DataColumn col in dtjson.Columns)
        {    
              row.Add(dr[col].toString());
        }
        rows.Add(row);
    }

如果您确实需要您作为示例编写的内容,那么这纯粹是您的特定需求,它不是一般做法,以下代码仅供您使用,它将为您提供所需的确切格式,即 { "2/15/2016": 20, "2/24/2016": 40 }

    Dictionary<string,object> rows = new Dictionary<string,object>();

    foreach (DataRow dr in dtjson.Rows)
    {   
        rows.[dtjson.col[0].toString()], dr[dtjson.col[1]]);
        rows.Add(row);
    }

编辑:OP 的贡献

foreach (DataRow drp in dtjso.Rows) 
{
    DateTime dat = Convert.ToDateTime(drp["Date"]);
    int epo = epoch(dat);
    string check = Convert.ToString(drp["co"]);
    string abc = string.Format("\"{0}\": {1},", epo, check);
    sb.Append(abc); 
}

【讨论】:

  • 嗨@Sami 我做了这样的事情 foreach (DataRow drp in dtjso.Rows) { DateTime dat = Convert.ToDateTime(drp["Date"]); int epo = epoch(dat);字符串检查 = Convert.ToString(drp["co"]); string abc = string.Format("\"{0}\": {1},", epo, check); sb.Append(abc); }
  • 好。实际上,您直接生成了所需的 json 字符串。没关系。我的代码生成的列表也会对客户端(jquery)做出相同的响应。它也以 json 格式返回
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多