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?

2voto

Eduardo Scoz Punkte 24423

Wenn Sie versuchen, einen Webdienst zu erstellen, um Daten über JSON an eine Webseite zu übertragen, sollten Sie das ASP.NET Ajax-Toolkit verwenden:

http://www.asp.net/learn/ajax/tutorial-05-cs.aspx

Es wandelt automatisch Ihre über einen Webservice übertragenen Objekte in JSON um und erstellt die Proxy-Klasse, die Sie zum Verbinden verwenden können.

2voto

Sudhakar Rao Punkte 167

Codierungsnutzung

Einfaches Objekt in JSON-Array EncodeJsObjectArray()

public class dummyObject
{
    public string fake { get; set; }
    public int id { get; set; }

    public dummyObject()
    {
        fake = "Dummy";
        id = 5;
    }

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append('[');
        sb.Append(id);
        sb.Append(',');
        sb.Append(JSONEncoders.EncodeJsString(fake));
        sb.Append(']');

        return sb.ToString();
    }
}

dummyObject[] dummys = new dummyObject[2];
dummys[0] = new dummyObject();
dummys[1] = new dummyObject();

dummys[0].fake = "Mike";
dummys[0].id = 29;

string result = JSONEncoders.EncodeJsObjectArray(dummys);

Ergebnis: [[29,"Mike"],[5,"Dummy"]]

Schöne Verwendung

Schöne JSON-Array-Ausgabe PrettyPrintJson()

string input = "[14,4,[14,\"Daten\"],[[5,\"10.186.122.15\"],[6,\"10.186.122.16\"]]]";
string result = input.PrettyPrintJson();

Das Ergebnis ist:

[
   14,
   4,
   [
      14,
      "Daten"
   ],
   [
      [
         5,
         "10.186.122.15"
      ],
      [
         6,
         "10.186.122.16"
      ]
   ]
]

1voto

Steve Punkte 11396

Der DataContractJSONSerializer wird alles für Sie erledigen mit der gleichen Leichtigkeit wie der XMLSerializer. Es ist trivial, dies in einer Web-App zu verwenden. Wenn Sie WCF verwenden, können Sie dessen Verwendung mit einem Attribut angeben. Die DataContractSerializer-Familie ist auch sehr schnell.

1voto

Prescient Punkte 1031

Ich habe festgestellt, dass Sie den Serializer überhaupt nicht benötigen. Wenn Sie das Objekt als Liste zurückgeben. Lassen Sie mich ein Beispiel verwenden.

In unserem asmx erhalten wir die Daten mithilfe der Variablen, die wir übergeben haben

// Daten zurückgeben
[WebMethod(CacheDuration = 180)]
public List GetData(int id) 
{
    var data = from p in db.property 
               where p.id == id 
               select new latlon
               {
                   lat = p.lat,
                   lon = p.lon

               };
    return data.ToList();
}

public class latlon
{
    public string lat { get; set; }
    public string lon { get; set; }
}

Dann greifen wir mithilfe von jQuery auf den Service zu und übergeben diese Variable.

// latlon abrufen
function getlatlon(propertyid) {
var mydata;

$.ajax({
    url: "getData.asmx/GetLatLon",
    type: "POST",
    data: "{'id': '" + propertyid + "'}",
    async: false,
    contentType: "application/json;",
    dataType: "json",
    success: function (data, textStatus, jqXHR) { //
        mydata = data;
    },
    error: function (xmlHttpRequest, textStatus, errorThrown) {
        console.log(xmlHttpRequest.responseText);
        console.log(textStatus);
        console.log(errorThrown);
    }
});
return mydata;
}

// Funktion mit Ihren Daten aufrufen
latlondata = getlatlon(id);

Und wir erhalten unsere Antwort.

{"d":[{"__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970}]}

1voto

Morris Bahrami Punkte 61

Beinhaltet:

using System.Text.Json;

Dann serialisieren Sie Ihr zu serialisierendes Objekt wie folgt: JsonSerializer.Serialize(object_to_serialize)

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