wake-up-neo.com

Wie kann man mit json.net datatable in json string konvertieren?

Wie kann man mit json.net datatable nach json konvertieren? Jeder Vorschlag ... Ich habe die erforderlichen Binärdateien heruntergeladen ... Welche Klasse sollte ich verwenden, um die Konvertierung meines Datenbogens in json zu erhalten? Bisher wurde diese Methode verwendet, um json-Zeichenfolge zu erhalten, indem ich meine ...

public string GetJSONString(DataTable table)
    {
        StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); //pre-allocate some space, default is 16 bytes
        for (int i = 0; i < table.Columns.Count; i++)
        {
            headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i);
        }
        headStrBuilder.Remove(headStrBuilder.Length - 1, 1); // trim away last ,

        StringBuilder sb = new StringBuilder(table.Rows.Count * 5); //pre-allocate some space
        sb.Append("{\"");
        sb.Append(table.TableName);
        sb.Append("\" : [");
        for (int i = 0; i < table.Rows.Count; i++)
        {
            string tempStr = headStrBuilder.ToString();
            sb.Append("{");
            for (int j = 0; j < table.Columns.Count; j++)
            {
                table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", "");
                tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString());
            }
            sb.Append(tempStr + "},");
        }
        sb.Remove(sb.Length - 1, 1); // trim last ,
        sb.Append("]}");
        return sb.ToString();
    }

Jetzt dachte ich an json.net, weiß aber nicht wo ich anfangen soll ....

27
Chendur Pandian
string json = JsonConvert.SerializeObject(table, Formatting.Indented);

Edit: Natürlich brauchen Sie keine eingerückte Formatierung, aber das macht es schön und lesbar.

62
k_b

Vielleicht könnte es helfen

Originalfassung

public static class DataTableToJson
{
    public static JArray ToJson(this System.Data.DataTable source)
    {
        JArray result = new JArray();
        JObject row;
        foreach (System.Data.DataRow dr in source.Rows)
        {
            row = new JObject();
            foreach (System.Data.DataColumn col in source.Columns)
            {
                row.Add(col.ColumnName.Trim(), JToken.FromObject(dr[col]));
            }
            result.Add(row);
        }
        return result;
    }
}

Bearbeitete Version  

Es gibt einen Zwischenschritt, weil ich ein Wörterbuch brauchte

public static IEnumerable<Dictionary<string, object>> ToDictionary(this DataTable table)
{
    string[] columns = table.Columns.Cast<DataColumn>().Select(c=>c.ColumnName).ToArray();
    IEnumerable<Dictionary<string, object>>  result = table.Rows.Cast<DataRow>()
            .Select(dr => columns.ToDictionary(c => c, c=> dr[c]));
    return result;
}

Sie können JsonConverter.SerializeObject(result); oder einen anderen Json-Serializer hinzufügen, um den Json-String zu erhalten.

Dies ist ähnlich wie bei @Hasan Javaid post

7
Madagaga

Überprüfen Sie dies. 

    private static string DataTableToJson(DataTable dataTable)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        var rows = (from DataRow d in dataTable.Rows
            select dataTable.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => d[col])).ToList();

        rows.AddRange(from DataRow d in dataTable.Rows
            select dataTable.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => d[col]));
        return serializer.Serialize(rows);
    }
0
Hasan Javaid