数据表到 json - c#

Datatable to json - c#

我有一个数据 table 如下所示

Subject Question Qtype
English xxxxxxx Subjective
English yyyyyyy Subjective
English zzzzzzz Objective
English sasasas Objective
English cvcvcvv Subjective

问题列将包含文本格式的问题。

Json应该是

{
    "Subject":"English",
    "xxxxxxx":"Subjective",
    "yyyyyyy":"Subjective",
    "zzzzzzz":"Objective",
    "sasasas":"Objective",
    "cvcvcvv":"Subjective"
}

我试过如下。但这不会return以上输出。

var list = new List<string[]>();
foreach (DataRow row in dt_questions.Rows)
{
    string Subject   = row["Subject"].ToString();
    string Question= row["Question"].ToString();
    string Qtype= row["Qtype"].ToString();
    list.Add(new string[] { Subject, Question, Qtype});
}
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(list);

由于 'subject' 应该只使用一次,所以你必须在循环之外处理它,并循环其余部分。
然后使用字典而不是列表:

var dt = new DataTable();
foreach(string c in "Subject,Question,Qtype".Split(','))
    dt.Columns.Add(c, typeof(string));
    
for(int i = 1; i<= 5;i++)
    dt.Rows.Add("English", $"Q{i}", (i==3 || i==4 ? "Objective" : "Subjective"));   

var dc = new Dictionary<string, string>();

dc.Add("Subject", dt.Rows[0].Field<string>("Subject"));

foreach(DataRow r in dt.Rows)
{
    dc.Add(r.Field<string>("Question"), r.Field<string>("QType"));
}

var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(dc);

或使用 Newtonsoft:

string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(dc);