296 Stimmen

Wie man einen JSON-String in C# erstellt

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?

9voto

Subtle Fox Punkte 602

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!

7voto

mythz Punkte 138304

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.

7voto

KushalSeth Punkte 1772

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.

6voto

Josh Punkte 590

Schauen Sie sich das http://www.codeplex.com/json/ für das Json-net.aspx-Projekt an. Warum das Rad neu erfinden?

5voto

Tamas Czinege Punkte 114595

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X