C# ASP.NET使用ASHX返回JSON
我正在为我的网站创建自动完成功能。 到目前为止,javascript部分已经结束。此外,我还可以获取匹配用户的MembershipUser对象 我需要以以下格式返回JSON:C# ASP.NET使用ASHX返回JSON,c#,jquery,asp.net,ajax,json,C#,Jquery,Asp.net,Ajax,Json,我正在为我的网站创建自动完成功能。 到目前为止,javascript部分已经结束。此外,我还可以获取匹配用户的MembershipUser对象 我需要以以下格式返回JSON: { query:'Li', suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'], data:['LR','LY','LI','LT'] } 这是ashx中的代码: public void ProcessReques
{
query:'Li',
suggestions:['Liberia','Libyan Arab Jamahiriya','Liechtenstein','Lithuania'],
data:['LR','LY','LI','LT']
}
这是ashx中的代码:
public void ProcessRequest (HttpContext context) {
System.Web.Script.Serialization.JavaScriptSerializer JsonSerializer;
string query = context.Request.QueryString["query"];
System.Web.Security.MembershipUserCollection Users = System.Web.Security.Membership.GetAllUsers();
context.Response.ContentType = "application/json";
foreach (System.Web.Security.MembershipUser User in Users)
{
if (User.UserName.StartsWith(query.ToLower()))
{
context.Response.Write(query + Environment.NewLine);
context.Response.Write(User.Email);
}
}
}
如何以所需格式返回json?
谢谢。根据您想要的退货创建一个具有合同的类,然后在该类的实例上使用JSONSerializer创建退货内容
[DataContract]
public class YourReturnObject {
[DataMember(Name="query")]
public String Query { get;set;}
[DataMember(Name="suggestions")]
public String[] Suggestions { get;set;}
[DataMember(Name="data")]
public String[] OtherData{ get;set;}
}
您的json有点笨拙,因为您必须维护这两个数组的索引。我可以建议更像这样的吗
{
query: 'Li',
data: [{id:'LR', text:'Liberia'}, {id:'LY', text:'Libyan Arab Jamahiriya'}, ...]
}
这有助于我:
using System;
using System.Data;
using System.Web;
using System.Linq;
using System.Collections;
using Newtonsoft.Json;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/json";
string quer = context.Request["query"];
DataTable _t = AMC.Core.Logic.Root.Storage.ExecuteQuery("SELECT [tag_name] FROM [tags] Where [tag_name] like '%' + @ke + '%'", new System.Data.SqlClient.SqlParameter("ke", quer));
DataRow[] list = new DataRow[_t.Rows.Count];
_t.Rows.CopyTo(list, 0);
var wapper = new {
query = quer
, suggestions = (from row in list select row["tag_name"].ToString()).ToArray()
//, data = new[] { "LR", "LY", "LI", "LT" }
};
context.Response.Write(JsonConvert.SerializeObject(wapper));
}
Json将在这里找到:顺便说一句,它不是有效的Json。请参阅:chaospanion,插件需要此输出…:/嗨,谢谢你的回答。你能解释一下这是如何在for循环中实现的吗?只是补充一下,在IE8(仅限于?)中,调用它时会失败。将弹出一个对话框,询问您是否要打开或保存文件“handler.ashx”。要解决此问题,请更改代码行以返回文本:context.Response.ContentType=“text/html”;
using System;
using System.Data;
using System.Web;
using System.Linq;
using System.Collections;
using Newtonsoft.Json;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/json";
string quer = context.Request["query"];
DataTable _t = AMC.Core.Logic.Root.Storage.ExecuteQuery("SELECT [tag_name] FROM [tags] Where [tag_name] like '%' + @ke + '%'", new System.Data.SqlClient.SqlParameter("ke", quer));
DataRow[] list = new DataRow[_t.Rows.Count];
_t.Rows.CopyTo(list, 0);
var wapper = new {
query = quer
, suggestions = (from row in list select row["tag_name"].ToString()).ToArray()
//, data = new[] { "LR", "LY", "LI", "LT" }
};
context.Response.Write(JsonConvert.SerializeObject(wapper));
}