Возврат объекта JSON со страницы ASP.NET - PullRequest
63 голосов
/ 11 марта 2010

В моей конкретной ситуации у меня есть несколько решений моей проблемы. Я хочу выяснить, какой из них более осуществим. В этом случае я также могу достичь своей цели, возвращая объект JSON из моего кода на стороне сервера; однако я не знаю, как это делается и как это лучше всего сделать.

Во-первых, мне не нужна полная страница aspx, так как мне нужен только ответ, возвращаемый из кода. Итак, я использую веб-сервисы, обработчик или есть какой-то другой конкретный способ сделать это?

Возможно ли это решение? Должен ли я построить строку JSON с использованием класса StringBuilder и вставить эту строку в целевую страницу aspx? Есть ли какие-либо меры предосторожности или вещи, о которых я должен знать?

Я ценю ваши идеи.

С уважением,

Кемаль

------------ ОБНОВЛЕНИЕ! ------------

Предположим, у меня есть объект 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.

Ответы [ 5 ]

122 голосов
/ 11 марта 2010

В вашей 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, рассмотрите возможность использования веб-службы (asmx) или WCF, которые могут выводить JSON.

16 голосов
/ 11 марта 2010

нет проблем сделать это с asp .... это наиболее естественно сделать с MVC, но может быть сделано и со стандартным asp.

В инфраструктуре MVC есть все виды вспомогательных классов для JSON, если вы можете, я бы посоветовал немного поучаствовать в MVC-любви. Если нет, вы, вероятно, можете просто получить вспомогательные классы JSON, используемые MVC, и использовать их. в контексте asp.net.

редактирование:

вот пример того, как вернуть данные JSON с MVC. Это будет в вашем классе контроллера. Это встроенная функциональность с MVC - когда вы создаете новый проект MVC, этот материал создается автоматически, так что в этом нет ничего особенного. Единственное, что я делаю, это возвращаю actionResult, который является JSON. JSON-метод, который я вызываю, - это метод класса Controller. Это все очень простые вещи MVC по умолчанию:

public ActionResult GetData()
{
    var data = new { Name="kevin", Age=40 };
    return Json(data, JsonRequestBehavior.AllowGet);
}

Эти возвращаемые данные могут быть вызваны через JQuery как вызов ajax, таким образом:

$.get("/Reader/GetData/", function(data) { someJavacriptMethodOnData(data); });
13 голосов
/ 11 марта 2010

Вот довольно хорошие решения моей проблемы:

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/

12 голосов
/ 19 ноября 2012

С помощью веб-страниц ASP.NET вы можете сделать это на одной странице в качестве базового примера GET (простейшая возможная вещь, которая может работать.

var json = Json.Encode(new {
    orientation = Cache["orientation"],
    alerted = Cache["alerted"] as bool?,
    since = Cache["since"] as DateTime?
});
Response.Write(json);
2 голосов
/ 21 ноября 2016

Если у вас есть код, используйте что-то вроде этого

        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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...