Ich habe gerade den XmlWriter verwendet, um XML zu erstellen, das in einer HTTP-Antwort zurückgesendet wird. Wie würden Sie einen JSON-String erstellen? Ich nehme an, Sie würden einfach einen StringBuilder verwenden, um den JSON-String aufzubauen und dann Ihre Antwort als JSON formatieren?
Antworten
Zu viele Anzeigen?Wenn Sie ein komplexes Ergebnis (eingebettet) benötigen, erstellen Sie Ihre eigene Struktur:
class templateRequest
{
public String[] registration_ids;
public Data data;
public class Data
{
public String message;
public String tickerText;
public String contentTitle;
public Data(String message, String tickerText, string contentTitle)
{
this.message = message;
this.tickerText = tickerText;
this.contentTitle = contentTitle;
}
};
}
und dann können Sie den JSON-String mit folgendem Aufruf erhalten
List ids = new List() { "id1", "id2" };
templateRequest request = new templeteRequest();
request.registration_ids = ids.ToArray();
request.data = new templateRequest.Data("Ihre Nachricht", "Ihr Ticket", "Ihr Inhalt");
string json = new JavaScriptSerializer().Serialize(request);
Das Ergebnis wird so aussehen:
json = "{\"registration_ids\":[\"id1\",\"id2\"],\"data\":{\"message\":\"Ihre Nachricht\",\"tickerText\":\"Ihr Ticket\",\"contentTitle\":\"Ihr Inhalt\"}}"
Hoffentlich hilft es!
Sie können auch meinen ServiceStack JsonSerializer ausprobieren, es ist der schnellste .NET JSON-Serializer im Moment. Er unterstützt die Serialisierung von DataContracts, beliebigen POCO-Typen, Schnittstellen, spätgebundenen Objekten einschließlich anonymer Typen usw.
Grundbeispiel
var kunde = new Kunde { Name="Joe Bloggs", Alter=31 };
var json = JsonSerializer.SerializeToString(kunde);
var vonJson = JsonSerializer.DeserializeFromString(json);
Hinweis: Verwenden Sie Microsofts JavaScriptSerializer nur, wenn Leistung für Sie nicht wichtig ist, da ich es aus meinen Benchmarks herauslassen musste, da es bis zu 40x-100x langsamer als die anderen JSON-Serializer ist.
Wenn Sie vermeiden möchten, eine Klasse zu erstellen und JSON zu erstellen, erstellen Sie ein dynamisches Objekt und serialisieren Sie das Objekt.
dynamic data = new ExpandoObject();
data.name = "kushal";
data.isActive = true;
// in JSON konvertieren
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
Lesen Sie das JSON und deserialisieren Sie es wie folgt:
// zurück in ein Objekt konvertieren
dynamic output = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
// einen bestimmten Wert lesen:
output.name.Value
ExpandoObject
stammt aus dem Namespace System.Dynamic
.
Schauen Sie sich das http://www.codeplex.com/json/ für das Json-net.aspx-Projekt an. Warum das Rad neu erfinden?
Wenn Sie die beiden integrierten JSON-Serialisierer (JavaScriptSerializer und DataContractJsonSerializer) nicht verwenden können oder möchten, können Sie die JsonExSerializer Bibliothek ausprobieren - ich verwende sie in mehreren Projekten und sie funktioniert ziemlich gut.