0

我有代码返回“Datatable”、“Datatable”内容 idstudent、avg、firstname、namecourse 和 date,这个“Datatable”内容更多。

 DataTable row = mn.selectProgram("programStudent", attributes);
                JsonTrans responce = new JsonTrans();
                responce.Convert(row);
                 //if (row.Rows.Count != 0)
            //{
            //    foreach (DataRow result in row.Rows)
            //    {
            //        string idstudent = result["id"].ToString();

            //        string avgstudent = result["AVG"].ToString();
            //        string firstname = result["fname"].ToString();
            //        string date = result["date"].ToString();
            //        string namecourse = result["name"].ToString();


            //    }


            //}

我尝试:

public string Convert(DataTable row)
        {
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            JsonWriter jsonWriter = new JsonTextWriter(sw);
            jsonWriter.Formatting = Formatting.Indented;
            jsonWriter.WriteStartArray();
            if (row.Rows.Count != 0)
            {
                foreach (DataRow result in row.Rows)
                {
                    jsonWriter.WriteStartObject();
                    string idstudent = result["id"].ToString();
                    jsonWriter.WritePropertyName("id");
                    jsonWriter.WriteValue(idstudent);
                    jsonWriter.WriteEndObject();
                }

            }
            jsonWriter.WriteEndArray();
            jsonWriter.Close();
            sw.Close();

如何将此行转换为 json,例如:

    [ {idstudent:"value" ,avg :"value" , avg : "value",firstname :"value"}
      {idstudent:"value" ,avg :"value" , avg : "value",firstname :"value"}   
      {idstudent:"value" ,avg :"value" , avg : "value",firstname :"value"}  ]
4

1 回答 1

0

看起来您的代码非常接近您要完成的工作。如果您希望 DataRows 中存在每一列,则您的 foreach 循环应遍历表的所有列。(请注意,为了清楚起见,我已将您的DataTable名称更改为table,并将DataRow名称更改为row。)

            foreach (DataRow row in table.Rows)
            {
                jsonWriter.WriteStartObject();
                foreach (DataColumn col in table.Columns)
                {
                    jsonWriter.WritePropertyName(col.ColumnName);
                    jsonWriter.WriteValue((row[col.ColumnName] == null) ? string.Empty : row[col.ColumnName].ToString());
                }
                jsonWriter.WriteEndObject();
            }

请注意,此示例将写出源数据为空的空字符串。如果您想完全保留空值,请在写入属性名称和值之前执行 (row[col.ColumnName] == null) 的检查。

于 2013-02-27T15:40:19.693 回答