我使用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;
答案 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();
}
}
}