Возврат объекта JSON со страницы ASP.NET
В моей конкретной ситуации у меня есть несколько решений для моей проблемы. Я хочу узнать, какой из них более осуществим. В этом случае я также могу достичь своей цели, возвращая объект JSON из моего кода на стороне сервера; однако я не знаю, как это делается и каков наилучший способ сделать это.
Во-первых, мне не нужна полная страница aspx, так как мне нужен только ответ, возвращенный из кода. Итак, я использую веб-службы, обработчик или есть ли какой-либо другой способ сделать это?
Возможно ли это решение? Я строю строку JSON с помощью класса StringBuilder
и вставляю эту строку на целевую страницу aspx? Есть ли какие-либо меры предосторожности или вещи, о которых я должен знать?
Я ценю ваши идеи.
Привет,
Кемаль
------------ UPDATE! ------------
Предположим, у меня есть объект JSON на моей странице userlist.aspx, который затем я использую с jQuery...
{"menu": {
"id": "color1",
"value": "color",
"popup": {
"menuitem": [
{"value": "Red"},
{"value": "Green"},
{"value": "Yellow"}
]
}
}} // example taken from the json.org/example page
Теперь, когда я хочу добавить новые пункты меню с моей страницы aspx, что мне делать... Я так думаю, что мой вопрос более конкретный...
Предположим, что я создаю новую строку в моем aspx-коде, как таковой "{"value": "Blue"}
. Как это сделать в уже существующем списке элементов на целевой странице? Или это не правильный подход к подобной ситуации? Если нет, то как еще это можно достичь?
Кроме того, если я хотел запустить событие jQuery, когда новый элемент добавлен в этот список, как это достигается?
------------ ОБНОВЛЕНИЕ 2 26 августа 2015 г. ------------
К тому моменту, когда я задал этот вопрос, способ, которым я подходил к проблеме, был в другом аспекте. Теперь я более компетентен в этом вопросе и могу с радостью принять самый проголосовавший ответ, так как подход к этому вопросу явно не должен включать уже существующий JSON и выводить новый код из кода, который также предлагает @DavGarcia
.
Ответы
Ответ 1
В вашей Page_Load вы хотите очистить нормальный выход и написать свой собственный, например:
string json = "{\"name\":\"Joe\"}";
Response.Clear();
Response.ContentType = "application/json; charset=utf-8";
Response.Write(json);
Response.End();
Чтобы преобразовать объект С# в JSON, вы можете использовать библиотеку, такую как Json.NET.
Вместо того, чтобы ваша страница .aspx выводила JSON, рассмотрите возможность использования веб-службы (asmx) или WCF, оба из которых могут выводить JSON.
Ответ 2
вот неплохие решения моей проблемы:
http://www.mikesdotnetting.com/Article/96/Handling-JSON-Arrays-returned-from-ASP.NET-Web-Services-with-jQuery
также обязательно прочитайте следующее:
http://encosia.com/2009/02/10/a-breaking-change-between-versions-of-aspnet-ajax/
Ответ 3
нет проблем с этим с asp.... это наиболее естественно сделать с MVC, но может быть сделано и со стандартным asp.
В MVC-фреймворке есть всевозможные вспомогательные классы для JSON, если можно, я предлагаю рассказать о некоторых MVC-love, если нет, вы, вероятно, можете просто просто получить вспомогательные классы JSON, используемые MVC и использовать их в контексте asp.net.
изменить:
вот пример того, как вернуть данные JSON с помощью MVC. Это будет в вашем классе контроллера. Это вне коробки с MVC - когда вы создаете новый проект MVC, этот материал автоматически создается, поэтому ничего особенного. Единственное, что я делаю, возвращает actionResult, который является JSON. Метод 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); });
Ответ 4
С веб-страницами ASP.NET вы можете сделать это на одной странице в качестве базового примера GET (самое простое, что может работать.
var json = Json.Encode(new {
orientation = Cache["orientation"],
alerted = Cache["alerted"] as bool?,
since = Cache["since"] as DateTime?
});
Response.Write(json);
Ответ 5
Если вы получаете код позади, используйте несколько таких
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.