尝试将json对象转换为DataTable

时间:2014-02-19 09:43:18

标签: c# json

我正在尝试使用此方法将json对象转换为DataTable

string jsonString="{"data":[{"uid":502458330,"name":"Mustapha Malass","pic_square":"https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t5/276351_502458330_1748214131_q.jpg","online_presence":"idle"},"

DataTable obj = JsonConvert.DeserializeObject<DataTable>(jsonString.ToString());

但是我收到了错误:

  

完成反序列化对象后在JSON字符串中找到的附加文本。

PS:我没有发布我所有的json字符串,因为它太大了,因为你可以在最后的愿望点看到, json没有完成。

2 个答案:

答案 0 :(得分:4)

试试这段代码。

String json="....some json string...";

DataTable tester = (DataTable) JsonConvert.DeserializeObject(json, (typeof(DataTable)));

它对我有用。

当你遇到这样的问题时,尝试在Google第一次搜索。相信我,你不是唯一一个遇到同样问题的人。

答案 1 :(得分:1)

这不是最有效的,但如果它没有嵌套并且创建DataTable,你可以循环遍历JSON。我在VB.Net中写了这个并使用转换器将它切换到C#(当我试图做同样的事情时,我遇到了这个问题而且常见的snippits并不适合我)。老问题,但我以为我分享后代:

public static DataTable JsonToDataTable(string json, string tableName)
{
    bool columnsCreated = false;
    DataTable dt = new DataTable(tableName);

    Newtonsoft.Json.Linq.JObject root = Newtonsoft.Json.Linq.JObject.Parse(json);
    Newtonsoft.Json.Linq.JArray items = (Newtonsoft.Json.Linq.JArray)root[tableName];

    Newtonsoft.Json.Linq.JObject item = default(Newtonsoft.Json.Linq.JObject);
    Newtonsoft.Json.Linq.JToken jtoken = default(Newtonsoft.Json.Linq.JToken);

    for (int i = 0; i <= items.Count - 1; i++)
    {
        // Create the columns once
        if (columnsCreated == false)
        {
            item = (Newtonsoft.Json.Linq.JObject)items[i];
            jtoken = item.First;

            while (jtoken != null)
            {
                dt.Columns.Add(new DataColumn(((Newtonsoft.Json.Linq.JProperty)jtoken).Name.ToString()));
                jtoken = jtoken.Next;
            }

            columnsCreated = true;
        }

        // Add each of the columns into a new row then put that new row into the DataTable
        item = (Newtonsoft.Json.Linq.JObject)items[i];
        jtoken = item.First;

        // Create the new row, put the values into the columns then add the row to the DataTable
        DataRow dr = dt.NewRow();

        while (jtoken != null)
        {
            dr[((Newtonsoft.Json.Linq.JProperty)jtoken).Name.ToString()] = ((Newtonsoft.Json.Linq.JProperty)jtoken).Value.ToString();
            jtoken = jtoken.Next;
        }

        dt.Rows.Add(dr);
    }

    return dt;

}

http://www.blakepell.com/convert-json-to-a-datatable-with-c-or-vb-net