繁体   English   中英

如何使用C#在ASP.Net中将Json字符串转换为DataTable

[英]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"
}]

每对column1column2是行

现在,您的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。

使用我编写的方法解析第一个字符串时的效果:

在此处输入图片说明

附加信息:

将JSON响应转换为DataTable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM