Gibt es eine einfache Möglichkeit, mein C # -Objekt mit dem über AJAX übergebenen JSON-Objekt zu füllen?
Dies ist das JSON-Objekt, das von der Seite mit JSON.stringify an C # WEBMETHOD übergeben wird
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C # WebMetod Das empfängt das JSON-Objekt
[WebMethod]
public static void SaveTeam(Object user)
{
}
C # -Klasse, die die Objektstruktur des an die WebMethod übergebenen JSON-Objekts darstellt
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Antworten:
Eine gute Möglichkeit, JSON in C # zu verwenden, ist JSON.NET
Schnellstarts und API-Dokumentation von JSON.NET - Die offizielle Website hilft Ihnen dabei.
Ein Beispiel für die Verwendung:
quelle
Da wir alle One-Liner-Code lieben
Newtonsoft ist schneller als der Java Script Serializer. ... dies hängt vom Newtonsoft NuGet-Paket ab, das beliebt und besser als der Standard-Serializer ist.
Wenn wir Klasse haben, verwenden Sie unten.
Keine Klasse verwendet dann dynamisch
quelle
Um Ihre Optionen offen zu halten, wenn Sie .NET 3.5 oder höher verwenden, finden Sie hier ein Beispiel, das Sie mit Generics direkt aus dem Framework heraus verwenden können. Wie andere bereits erwähnt haben, sollten Sie JSON.net wirklich verwenden, wenn es sich nicht nur um einfache Objekte handelt.
Du brauchst:
quelle
In Anbetracht Ihres Codebeispiels sollten Sie nichts anderes tun müssen.
Wenn Sie diese JSON-Zeichenfolge an Ihre Webmethode übergeben, wird die JSON-Zeichenfolge automatisch analysiert und ein aufgefülltes Benutzerobjekt als Parameter für Ihre SaveTeam-Methode erstellt.
Im Allgemeinen können Sie die
JavascriptSerializer
Klasse wie folgt verwenden oder für mehr Flexibilität eines der verschiedenen Json-Frameworks (Jayrock JSON ist gut) für eine einfache JSON-Manipulation verwenden.quelle
System.Web.Extensions
Assembly verweisen und ein hinzufügenusing System.Web.Script.Serialization
, um an die zu gelangen.JavaScriptSerializer
Sobald Sie dies tun, scheint dies der sauberste Weg zu sein, Ihrejson
Zeichenfolgen in konkrete c # -Klassen zu deserialisieren .Eine andere wirklich einfache Lösung ist die Verwendung der Bibliothek Newtonsoft.Json:
quelle
Die folgenden 2 Beispiele verwenden entweder
Beispiel 1: Verwenden von System.Web.Script.Serialization
Verwendung: JSON-Objekt zu benutzerdefiniertem C # -Objekt
Beispiel 2: Verwenden von System.Web.Helpers
Verwendung: JSON-Objekt zu benutzerdefiniertem C # -Objekt
Dieser Code erfordert das Hinzufügen des System.Web.Helpers-Namespace in,
Oder
Hoffe das hilft!
quelle
dynamic
Typen keine echte Typprüfung erhalten. Wenn Ihr JSON"Name" : "Ahmed"
beispielsweise "Name" in Ihrem C # -Code enthält und Sie diesen falsch eingeben, handelt es sich um einen Laufzeitfehler (bleh).Weitere Informationen finden Sie unter folgendem Link: http://ishareidea.blogspot.in/2012/05/json-conversion.html
Über
DataContractJsonSerializer Class
Sie können hier lesen .quelle
Die Verwendung von JavaScriptSerializer () ist weniger streng als die generische Lösung: public static T Deserialize (string json)
Dies kann nützlich sein, wenn Sie json an den Server übergeben, der nicht genau der Objektdefinition entspricht, in die Sie konvertieren möchten.
quelle
In Bezug auf die Leistung fand ich den Serializer des ServiceStack etwas schneller als andere. Es ist die JsonSerializer-Klasse im ServiceStack.Text-Namespace.
https://github.com/ServiceStack/ServiceStack.Text
ServiceStack ist über das NuGet-Paket verfügbar: https://www.nuget.org/packages/ServiceStack/
quelle
JSON.Net ist die beste Wahl, aber je nach Form der Objekte und ob es kreisförmige Abhängigkeiten gibt, können Sie JavaScriptSerializer oder DataContractSerializer verwenden.
quelle
Der JSON C # -Klassengenerator in Codeplex generiert Klassen, die mit NewtonSoftJS gut funktionieren.
quelle
JavaScript Serializer: erfordert
using System.Web.Script.Serialization;
Data Contract Serializer: erfordert
using System.Runtime.Serialization.Json;
- Der generische Typ T sollte im Data Contract besser serialisierbar seinquelle
Anstatt nur als Objekt zu senden.
Erstellen Sie eine öffentliche Klasse von Eigenschaften, auf die zugegriffen werden kann, und senden Sie die Daten an die Webmethode.
Verwenden Sie im Ajax-Aufruf dieselben Parameternamen, um Daten zu senden.
quelle