从ASP.NET页面返回JSON对象
在我的特殊情况下,我有几个解决scheme来解决我的问题。 我想找出哪一个更可行。 在这种情况下,我也可以通过从服务器端代码中返回一个JSON对象来实现我的目标。 然而,我不知道这是怎么做的,做这件事的最好方法是什么。
首先,我不需要一个完整的aspx页面,因为我只需要从代码返回的响应。 那么,我使用Web服务,处理程序,还是有其他具体的方法来做到这一点?
这个解决scheme可行吗? 使用StringBuilder
类构buildJSONstring并将该string注入到目标aspx页面中? 有什么预防措施或我应该注意的事情吗?
我很欣赏你的想法。
问候,
凯末尔
————更新!————
假设我在我的userlist.aspx页面中有一个JSON对象,然后使用jQuery …
{"menu": { "id": "color1", "value": "color", "popup": { "menuitem": [ {"value": "Red"}, {"value": "Green"}, {"value": "Yellow"} ] } }} // example taken from the json.org/example page
现在,当我想从我的aspx页面添加一个新的菜单项,我该怎么做…我想这样我的问题是更具体的…
让我们假设我在aspx代码中创build了一个新的string,例如"{"value": "Blue"}
,如何将其注入到目标页面中已经存在的项目列表?或者这不是正确的方法情况如何?如果不是,还能如何实现呢?
另外,如果我想在一个新的项目被添加到这个列表中时触发一个jQuery事件,这是如何实现的?
———— 2015年8月26日更新2 ————
当我问这个问题的时候,我解决问题的方式还有另外一个方面。 我现在更加精通这个主题,可以很乐意地接受最多的投票答案,因为这个问题的解决办法显然不应该包括已经存在的JSON,并且像@DavGarcia
暗示的那样从代码中输出一个新的@DavGarcia
。
在你的Page_Load中,你将需要清除正常输出并编写你自己的,例如:
string json = "{\"name\":\"Joe\"}"; Response.Clear(); Response.ContentType = "application/json; charset=utf-8"; Response.Write(json); Response.End();
要将C#对象转换为JSON,您可以使用Json.NET之类的库。
不要让你的.aspx页面输出JSON,而是考虑使用Web服务(asmx)或WCF,它们都可以输出JSON。
这里是我的问题很好的解决scheme:
也请务必阅读: http : //encosia.com/2009/02/10/a-breaking-change-between-versions-of-aspnet-ajax/
没有问题用asp做….用MVC这样做是最自然的,但也可以用标准的asp来完成。
MVC框架为JSON提供了各种各样的帮助类,如果可以的话,我build议在某些MVC爱好者,如果不是的话,你可能很容易得到MVC使用的JSON帮助类,并在上下文中使用它们的asp.net。
编辑:
这里是一个如何使用MVC返回JSON数据的例子。 这将在你的控制器类。 这是与MVC开箱即用function – 当你创build一个新的MVC项目这东西得到自动创build,所以没有什么特别的。 我唯一要做的就是返回一个JSON的actionResult,我调用的JSON方法是Controller类的一个方法,这都是非常基本的,默认的MVC的东西:
public ActionResult GetData() { data = new { Name="kevin", Age=40 }; return Json(data, JsonRequestBehavior.AllowGet); }
这个返回数据可以通过jQuery作为ajax调用来调用:
$.get("/Reader/GetData/", function(data) { someJavacriptMethodOnData(data); });
使用ASP.NET Web页面,您可以在单个页面上作为基本的GET示例(最简单的方法)。
var json = Json.Encode(new { orientation = Cache["orientation"], alerted = Cache["alerted"] as bool?, since = Cache["since"] as DateTime? }); Response.Write(json);
如果你得到代码,使用这样的一些
MyCustomObject myObject = new MyCustomObject(); myObject.name='try'; //OBJECT -> JSON var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); string myObjectJson = javaScriptSerializer.Serialize(myObject); //return JSON Response.Clear(); Response.ContentType = "application/json; charset=utf-8"; Response.Write(myObjectJson ); Response.End();
所以,你返回一个JSON对象,并使用MyCustomObject的所有属性进行序列化。