2010-03-11 23 views
54

Nella mia situazione particolare, ho un paio di soluzioni al mio problema. Voglio scoprire quale è più fattibile. In questo caso, posso anche raggiungere il mio obiettivo restituendo un oggetto JSON dal mio codice lato server; tuttavia, non so come sia fatto e quale sia il modo migliore per farlo.Restituzione dell'oggetto JSON da una pagina ASP.NET

Prima di tutto, non ho bisogno di una pagina di aspx completa in quanto ho solo bisogno di una risposta restituita dal codice. Quindi, utilizzo i servizi Web, un gestore o esiste un altro modo specifico per farlo?

Questa soluzione è fattibile? Costruisco la stringa JSON usando la classe StringBuilder e inserisco quella stringa nella pagina di destinazione di aspx? Ci sono delle precauzioni o cose di cui dovrei essere a conoscenza?

Apprezzo le tue idee.

saluti,

Kemal

------------ UPDATE! ------------

Supponiamo che io sono un oggetto JSON nella mia pagina userlist.aspx, che poi io uso con jQuery ...

{"menu": { 
    "id": "color1", 
    "value": "color", 
    "popup": { 
    "menuitem": [ 
     {"value": "Red"}, 
     {"value": "Green"}, 
     {"value": "Yellow"} 
    ] 
    } 
}} // example taken from the json.org/example page 

Ora quando voglio aggiungere nuove voci di menu dalla mia pagina aspx, cosa devo fare ... credo in questo modo i miei articoli on è più specifico ...

Supponiamo di creare una nuova stringa nel mio codice aspx, come tale "{"value": "Blue"}. Come faccio a inserirli nella lista articoli già esistente nella pagina di destinazione? O non è questo l'approccio corretto a questo tipo di situazione? In caso contrario, in quale altro modo può essere raggiunto?

Inoltre, se volessi attivare un evento jQuery quando un nuovo elemento viene aggiunto a questo elenco, come viene raggiunto?

------------ UPDATE 2 il 26 agosto, 2015 ------------

Con il tempo ho fatto questa domanda, il modo in cui Mi stavo avvicinando al problema era in un altro aspetto. Ora sono più esperto nell'argomento e posso accettare con piacere la risposta più votata in quanto l'approccio a questa domanda chiaramente non dovrebbe includere il JSON già esistente ed emetterne uno nuovo dal codice come suggerisce anche lo @DavGarcia.

risposta

108

Nella tua Page_Load si vuole cancellare l'uscita normale e scrivere il proprio, per esempio:

string json = "{\"name\":\"Joe\"}"; 
Response.Clear(); 
Response.ContentType = "application/json; charset=utf-8"; 
Response.Write(json); 
Response.End(); 

per convertire un oggetto C# per JSON è possibile utilizzare una libreria, come Json.NET.

Invece di ottenere la pagina .aspx per l'output di JSON, prendere in considerazione l'utilizzo di un servizio Web (asmx) o WCF, che possono entrambi generare JSON.

+0

ok Sto aggiornando la mia domanda. –

+1

Risposta aggiornata per includere Response.End(), altrimenti i controlli di pagina potrebbero essere visualizzati –

+0

Uno dei problemi che abbiamo affrontato con questo approccio è: Se la pagina è complessa e ha più controlli utente e si suppone che uno dei controlli di pagina per un cookie e se non è presente, prova a impostarlo. Questo errore genera sempre l'errore "Il server non può modificare i cookie dopo che le intestazioni HTTP sono state inviate". –

11

nessun problema a farlo con asp .... è molto naturale farlo con MVC, ma può essere fatto anche con asp standard.

Il framework MVC dispone di classi di helper di tutti i tipi per JSON, se possibile, suggerirei sussing in alcuni MVC-love, in caso contrario, è possibile ottenere semplicemente semplicemente le classi helper JSON utilizzate da MVC e utilizzarle loro nel contesto di asp.net.

edit:

Ecco un esempio di come restituire i dati JSON con MVC. Questo sarebbe nella tua classe controller. Questa è una funzionalità fuori dagli schemi con MVC: quando crei un nuovo progetto MVC, questa roba viene creata automaticamente, quindi non è niente di speciale. L'unica cosa che sto facendo è restituire un'azioneResult che è JSON Il metodo JSON che sto chiamando è un metodo sulla classe Controller.Questo è tutto molto semplice, di default roba MVC:

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

Questi dati di ritorno potrebbe essere chiamato tramite JQuery come una chiamata AJAX così:

$.get("/Reader/GetData/", function(data) { someJavacriptMethodOnData(data); }); 
+2

grazie per la risposta, non sto utilizzando MVC ma entrerò nella ricerca a partire dalla tua risposta. Mentre lo faccio, puoi fornirmi delle risorse che già conosci, se ce ne sono? –

11

Con ASP.NET Web Pages si può fare questo su una sola pagina come esempio GET di base (la cosa più semplice possibile che può funzionare.

var json = Json.Encode(new { 
    orientation = Cache["orientation"], 
    alerted = Cache["alerted"] as bool?, 
    since = Cache["since"] as DateTime? 
}); 
Response.Write(json); 
+3

Ho dovuto cercare questo, in modo che chiunque altro non lo sappia, che l'oggetto JSON è System.Web.Helpers.Json - If non si fa riferimento a quella DLL già, o non si può, si può usare System.Web.Script.Serialization.JavaScriptSerializer, che funziona allo stesso modo. – eselk

+0

@Scott: se si stesse eseguendo il looping su un recordset su una singola pagina ASP.net, come li raggrupperesti (anziché singoli come nel tuo esempio)? – webdad3

0

Se si ottiene il codice, utilizzare alcuni, come questo

 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(); 

Così si restituisce un oggetto JSON serializzato con tutti gli attributi di MyCustomObject.

Problemi correlati