C# json.net DataTable反序列化返回null
我使用json.net来序列化和反序列化我的数据表。已成功序列化,但反序列化后返回空 我的服务方法如下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] =
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();
}
}
}
尝试过。但结果相同。空。