我已经暂停了JArray数据。我需要根据Jarray中的列名动态创建一个数据表,之后我需要插入数据。
你能帮我做一下这个操作吗?
<pre>
{[
{
"PID": 3,
"FirstName": "parveen",
"LastName": "a",
"Gender": "male"
},
{
"PID": 8,
"FirstName": "ramarao",
"LastName": "M",
"Gender": "male"
}
]}
</pre>
提前致谢
普尔纳
答案 0 :(得分:5)
您的JSON输入无效。您应该删除第一个和最后一个括号,因为它是一个数组,而不是一个对象。如果您知道行类型,则应使用其中一个现有JSON库,并将该数组反序列化为强类型列表。如果您不知道类型,请使用toDataTable方法。
我在示例中使用了以下库:
http://james.newtonking.com/json
private static void Main(string[] args)
{
var data =
"[{\"PID\": 3,\"FirstName\": \"parveen\",\"LastName\": \"a\",\"Gender\": \"male\"},{\"PID\": 8,\"FirstName\": \"ramarao\",\"LastName\": \"M\",\"Gender\": \"male\"}]";
var dattable = toDataTable(data);
var list = toList(data);
}
class User
{
public int PID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Gender { get; set; }
}
private static List<User> toList(string json)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<List<User>>(json);
}
private static DataTable toDataTable(string json)
{
var result = new DataTable();
var jArray = JArray.Parse(json);
//Initialize the columns, If you know the row type, replace this
foreach (var row in jArray)
{
foreach (var jToken in row)
{
var jproperty = jToken as JProperty;
if (jproperty == null) continue;
if (result.Columns[jproperty.Name] == null)
result.Columns.Add(jproperty.Name,typeof(string));
}
}
foreach (var row in jArray)
{
var datarow = result.NewRow();
foreach (var jToken in row)
{
var jProperty = jToken as JProperty;
if (jProperty == null) continue;
datarow[jProperty.Name] = jProperty.Value.ToString();
}
result.Rows.Add(datarow);
}
return result;
}
答案 1 :(得分:0)
使用有效的JArray,下面的代码应该可以完成您想做的事情。
DataTable MyTable = JsonConvert.DeserializeObject<DataTable>(YOURJARRAY.ToString());
您将需要命名表格。
MyTable.TableName = "Test Table";
答案 2 :(得分:0)
这对我有用:
DataTable dataTable = JsonConvert.DeserializeObject<DataTable>(JsonConvert.SerializeObject(validJArrayData));