C# json.net DataTable反序列化返回null

C# json.net DataTable反序列化返回null,c#,json,datatable,json.net,C#,Json,Datatable,Json.net,我使用json.net来序列化和反序列化我的数据表。已成功序列化,但反序列化后返回空 我的服务方法如下 public string GetData() { DataTable dt = new DataTable("MyData"); dt.Columns.Add("Name"); dt.Columns.Add("Age"); DataRow dr1 = dt.NewRow(); dr1[0] =

我使用json.net来序列化和反序列化我的数据表。已成功序列化,但反序列化后返回空

我的服务方法如下

    public string GetData()
    {
        DataTable dt = new DataTable("MyData");
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");

        DataRow dr1 = dt.NewRow();
        dr1[0] = "Name1";
        dr1[1] = 20;
        dt.Rows.Add(dr1);

        DataRow dr2 = dt.NewRow();
        dr2[0] = "Name2";
        dr2[1] = 23;
        dt.Rows.Add(dr2);

        DataRow dr3 = dt.NewRow();
        dr3[0] = "Name3";
        dr3[1] = 28;
        dt.Rows.Add(dr3);


        return JsonConvert.SerializeObject(dt, new DataTableConverter());
  }
    protected void Page_Load(object sender, EventArgs e)
    {
        // corrected to WebRequest from HttpWebRequest
        WebRequest request = WebRequest.Create("http://ltms10/lamiservice/Service1.svc/GetData");

        request.Method = "GET";
        request.ContentType = "application/json; charset=utf-8";

        //get response-stream, and use a streamReader to read the content
        using (WebResponse response = request.GetResponse())
        {
            using (Stream s = response.GetResponseStream())
            {
                using (StreamReader sr = new StreamReader(s))
                {
                    var jsonData = sr.ReadToEnd();
                    Label1.Text = jsonData;

                    DataTable dt = JsonConvert.DeserializeObject<DataTable>(jsonData);
                    grd1.DataSource = dt;
                    grd1.DataBind();

                }
            }
        }
    }
我的网页代码如下

    public string GetData()
    {
        DataTable dt = new DataTable("MyData");
        dt.Columns.Add("Name");
        dt.Columns.Add("Age");

        DataRow dr1 = dt.NewRow();
        dr1[0] = "Name1";
        dr1[1] = 20;
        dt.Rows.Add(dr1);

        DataRow dr2 = dt.NewRow();
        dr2[0] = "Name2";
        dr2[1] = 23;
        dt.Rows.Add(dr2);

        DataRow dr3 = dt.NewRow();
        dr3[0] = "Name3";
        dr3[1] = 28;
        dt.Rows.Add(dr3);


        return JsonConvert.SerializeObject(dt, new DataTableConverter());
  }
    protected void Page_Load(object sender, EventArgs e)
    {
        // corrected to WebRequest from HttpWebRequest
        WebRequest request = WebRequest.Create("http://ltms10/lamiservice/Service1.svc/GetData");

        request.Method = "GET";
        request.ContentType = "application/json; charset=utf-8";

        //get response-stream, and use a streamReader to read the content
        using (WebResponse response = request.GetResponse())
        {
            using (Stream s = response.GetResponseStream())
            {
                using (StreamReader sr = new StreamReader(s))
                {
                    var jsonData = sr.ReadToEnd();
                    Label1.Text = jsonData;

                    DataTable dt = JsonConvert.DeserializeObject<DataTable>(jsonData);
                    grd1.DataSource = dt;
                    grd1.DataBind();

                }
            }
        }
    }
这里的字符串返回如下

[{\Name\:\Name1\,\Age\:\20\,{\Name\:\Name2\,\Age\:\23\,{\Name\:\Name3\,\Age\:\28\}]

试试这个

DataTable dt = (DataTable) JsonConvert.DeserializeObject(jsonData, (typeof(DataTable)));

我发现问题在于格式问题。当我使用JSONTextReader读取时,它被成功转换。因此跳过转义字符。我还检查了控制台。WriteLine也得到了正确的数据

原始数据是

[{姓名:姓名1,年龄:20},{姓名:姓名2,年龄:23},{姓名:姓名3,年龄:28}]

但是如何在JQuery中格式化它。由于此转义字符,jquery图表未绑定

更新:

我得到的结论是,我们需要通过避免转义字符将数据转换为真正的json格式。为此,我们可以使用JSONTextReader类。我不知道这是正确的方法。但这是解决这个问题的一个办法,得到了反序列化的数据表。更改后的代码如下所示

使用WebResponse=request.GetResponse {

                using (Stream s = response.GetResponseStream())
                {
                    using (StreamReader sr = new StreamReader(s))
                    {
                        var jsonData = sr.ReadToEnd();
                        JsonTextReader reader = new JsonTextReader(new StringReader(jsonData));
                        string data="";
                        while (reader.Read())
                        {
                            if (reader.Value != null)
                                data += reader.Value;
                        }

                        DataTable dt = (DataTable)JsonConvert.DeserializeObject(data, typeof(DataTable));

                        grd1.DataSource = dt;
                        grd1.DataBind();

                    }
                }
            }

尝试过。但结果相同。空。