json.net DataTable Deserialixe返回null

时间:2014-01-21 04:55:05

标签: 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] = "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();

                }
            }
        }
    }

此处字符串返回如下

&#34; [{\&#34;名称\&#34;:\&#34;名1 \&#34; \&#34;年龄\&#34;:\&#34; 20 \&#34;},{\&#34;名称\&#34;:\&#34;名称2 \&#34; \&#34;年龄\&#34;:\&#34; 23 \&#34;},{\&#34;名称\&#34;:\&#34; NAME3 \&#34; \&#34;年龄\&#34;:\&#34; 28 \&#34;}]&#34;

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

我发现格式是问题的问题。当我使用JSONTextReader阅读时,它已成功转换。因此跳过了转义字符。我也检查了Console.WriteLine()也得到了正确的数据

原始数据

[{ “名称”: “NAME1”, “年龄”:20},{ “名称”: “名称2”, “年龄”:23},{ “名称”: “NAME3”, “年龄”:28 }]

但是如何在JQuery中格式化它。由于这个转义字符jquery图表没有绑定

更新

我得到了灵魂,我们需要通过避免转义字符将数据更新为真正的json格式。为此,我们可以使用JSONTextReader类。我不知道这是正确的做法。但这是解决这个问题的方法,并得到了反序列化的数据表。更改后的代码位于

之下

使用(WebResponse response = 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();

                    }
                }
            }