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 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.
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"
]
]
]
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.
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}]}
- See previous answers
- Weitere Antworten anzeigen