我有以下代码:(为了便于阅读而简化)
C#
foreach(DataRow dRow in myDS.Tables[0].Rows){
Company myCompany = new Company();
myCompany.id = int.Parse(dRow["id"].ToString());
Companies.Add(myCompany);
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
Response.Write(serializer.Serialize(Companies));
Response.End();
jQuery
$.getJSON('ajax.aspx?what=' + $('input[name="what"]').val() + '&where=' + $('input[name="what"]').val(), function (data) {
$.each(data, function (key, val) {
var myCompany = new function () {
this.id = val.id;
}
Companies.push(myCompany);
});
});
现在,我在 C# 代码中有另一个对象,名为 Cities
我想在同一个请求中返回它。
类似的东西
Response.Write(serializer.Serialize(Companies));
Response.Write(serializer.Serialize(Cities));
Response.End()
当然会在客户端解析它。
我怎样才能做这样的事情?
最佳答案
您可以将这两个属性包装到一个匿名对象中:
var result = new { Cities = Cities, Companies = Companies };
Response.Write(serializer.Serialize(result);
Response.End();
或者,如果您使用的是一些不支持匿名对象的旧.NET版本,您可以定义一个包装类:
public class Wrapper
{
public IEnumerable<Cities> Cities { get; set; }
public IEnumerable<Company> Companies { get; set; }
}
然后:
Wrapper result = new Wrapper();
wrapper.Cities = Cities;
wrapper.Companies = Companies;
Response.Write(serializer.Serialize(wrapper);
Response.End();
还要修复您的 AJAX 调用,因为您没有正确对参数进行 url 编码:
var data = {
what: $('input[name="what"]').val(),
where: $('input[name="what"]').val()
};
$.getJSON('ajax.aspx', data, function (data) {
$.each(data.Companies, function (index, val) {
var myCompany = new function () {
this.id = val.id;
}
Companies.push(myCompany);
});
});
关于c# - 在同一响应中返回多个 JSON 对象并解析它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7538345/