我无法反序列化从c#代码后面传递的JSON对象。我这3个小时一直在努力,无法理解原因。
这是我的json对象创建
struct specialitiy_struct {
public int id;
public string name;
};
[WebMethod]
public static string get_specialities(string ProfessionalID)
{
Database db = DatabaseFactory.CreateDatabase("Connection");
DbCommand dbCommand;
dbCommand = db.GetStoredProcCommand("Select_Profes_Speciality");
db.AddInParameter(dbCommand, "prof_id", DbType.Int16, Convert.ToInt16(ProfessionalID));
IDataReader dr = db.ExecuteReader(dbCommand);
List<specialitiy_struct> my_list = new List<specialitiy_struct>();
specialitiy_struct my_speciality;
while (dr.Read()) {
my_speciality = new specialitiy_struct();
my_speciality.id = Convert.ToInt16(dr["SpecialtyID"].ToString().Trim());
my_speciality.name = dr["SpecialtyName"].ToString().Trim();
my_list.Add(my_speciality);
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(my_list);
}
这里是用于反序列化json对象的jquery代码
$.ajax({
type: "POST",
url: "NotificationSettings.aspx/get_specialities",
data: "{'ProfessionalID':'" + <%= Session["ProflId"].ToString().Trim() %> + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data, status) {
$.each(data, function (dt) {
var mydata = data.d;
var obj = $.parseJSON(mydata);
$("#txt_speciality").tokenInput("add", { name: obj.name, id: obj.id});
});
}
});
返回的json对象是这个
d: "[{"id":67,"name":"Kardiyoloji"},{"id":1,"name":"Acil Tip"}]"
我无法正确反序列化json对象,请帮我做一下?
答案 0 :(得分:2)
您的问题是(部分)因为data.d
是一个对象数组,而不是一个对象,因此您无法访问它的name
和id
属性以获取有用的信息(它没有任何)。我怀疑你应该做的是迭代data.d
,而不是data
,如下:
var d = $.parseJSON(data.d);
$.each(d, function(index, dt) {
$("#txt_speciality").tokenInput("add", { name: dt.name, id: dt.id});
});
如果您从服务器返回有效的JSON,则不需要自己解析它。如果您要返回一个具有JSON字符串属性的JSON对象,那么您应该更改它,因为绝对不需要这样做。
答案 1 :(得分:1)
试试这个:
success: function (data) {
$.each($.parseJSON(data.d), function (key, value) {
$("#txt_speciality").tokenInput("add", {
name: value.name,
id: value.id
});
});
}
答案 2 :(得分:0)
我认为你的问题在于:
$.each(data, function (dt) { // <----dt here
var mydata = data.d; //<----data.d data here
更改为:
success: function (data, status) {
$.each(data, function (i, dt) {
var mydata = dt.d;
var obj = $.parseJSON(mydata);
$("#txt_speciality").tokenInput("add", { name: obj.name, id: obj.id});
});
}
d: "[{"id":67,"name":"Kardiyoloji"},{"id":1,"name":"Acil Tip"}]"
似乎不是一个有效的循环播放的json对象。
答案 3 :(得分:0)
你可以试试这个:
success: function (data, status) {
var mydata = $.parseJSON(data);
$.each(mydata, function (index, element) {
$("#txt_speciality").tokenInput("add", { name: element.name, id: element.id});
});
}
如果此方法有效,则可能未正确设置JSON内容类型。