[英]How to Convert Json String into DataTable in ASP.Net with C#
我正在使用此API 。 它根据用户输入给出json输出。 例如:
{
"apple.com":{"status":"regthroughothers","classkey":"domcno"},
"asdfgqwx.com":{"status":"available","classkey":"domcno"},
"microsoft.org":{"status":"unknown"},
"apple.org":{"status":"unknown"},
"microsoft.com":{"status":"regthroughothers","classkey":"domcno"},
"asdfgqwx.org":{"status":"unknown"}
}
现在,我想在dataTable中更改此json输出,然后在Gridview和Repeater之类的Data Control中进行绑定。
我正在使用此方法来执行此操作,但是当我在此方法中传递json输出以上时,它将引发错误
读取DataTable时出现意外的JSON令牌。 应该是StartArray,得到了StartObject。 路径'',第1行,位置1。
要转换为DataTable
您必须了解您在做什么:
DataTable
表示行和列的集合,您的JSON字符串必须表示一个可以通过转换为行和列的集合的集合。
这是正确的JSON文件的示例,可以通过更改为DataTable
:
[{
"column1": "1788",
"column2": "19"
},
{
"column1": "1789",
"column2": "24"
},
{
"column1": "1790",
"column2": "24"
},
{
"column1": "1790",
"column2": "23"
},
{
"column1": "1790",
"column2": "21"
}]
每对column1
和column2
是行
现在,您的JSON不好。 我将其更改为:(正确的DataTable
模式)
[{
"name": "apple.com",
"status": "regthroughothers",
"classkey": "domcno"
},
{
"name": "asdfgqwx.com",
"status": "available",
"classkey": "domcno"
},
{
"name": "microsoft.org",
"status": "unknown",
"classkey": ""
},
{
"name": "apple.org",
"status": "unknown",
"classkey": ""
},
{
"name": "microsoft.com",
"status": "regthroughothers",
"classkey": "domcno"
},
{
"name": "asdfgqwx.org",
"status": "unknown",
"classkey": "domcno"
}]
然后在数组的开头和结尾添加[
sign和]
sign
接下来,您可以执行此操作。 这是将上述JSON字符串反序列化为DataTable
工作示例
using Newtonsoft.Json;
public class JsonExample
{
private string jsonObject = "[{ \"name\": \"apple.com\", \"status\": \"regthroughothers\", \"classkey\": \"domcno\"},{ \"name\": \"asdfgqwx.com\", \"status\": \"available\", \"classkey\": \"domcno\"},{ \"name\": \"microsoft.org\", \"status\": \"unknown\", \"classkey\": \"\"},{ \"name\": \"apple.org\", \"status\": \"unknown\", \"classkey\": \"\"},{ \"name\": \"microsoft.com\", \"status\": \"regthroughothers\", \"classkey\": \"domcno\"},{ \"name\": \"asdfgqwx.org\", \"status\": \"unknown\", \"classkey\": \"domcno\"}]".Trim();
public JsonExample()
{
DataTable items = JsonConvert.DeserializeObject<DataTable>(jsonObject);
foreach (DataRow item in items.Rows)
{
Console.WriteLine($"Name: {item[0]} Status: {item[1]} classkey {item[2]} " );
}
}
}
但是,如果您不想,请不要更改JSON文件
private string jsonObject = JSON_String.Replace("{", "[{").Replace("}", "}]");
public JsonExample()
{
JArray jArray = JArray.Parse(jsonObject);
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("status");
dt.Columns.Add("classkey");
foreach (JProperty item in jArray[0])
{
var jArray2 = JArray.Parse(item.Value.ToString());
foreach (var item2 in jArray2)
{
dt.Rows.Add(item.Name, item2["status"], item2["classkey"]);
Console.WriteLine($"Name: {item.Name} Status: {item2["status"]} classkey {item2["classkey"]} ");
}
}
}
效果与相同,但您不需要更改JSON String exept 2 replace。
使用我编写的方法解析第一个字符串时的效果:
附加信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.