我正在尝试使用此方法将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没有完成。
答案 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