Existe-t-il un moyen simple de remplir mon objet C # avec l'objet JSON transmis via AJAX?
Il s'agit de l'objet JSON transmis à C # WEBMETHOD à partir de la page utilisant JSON.stringify
{
"user": {
"name": "asdf",
"teamname": "b",
"email": "c",
"players": ["1", "2"]
}
}
C # WebMetod qui reçoit l'objet JSON
[WebMethod]
public static void SaveTeam(Object user)
{
}
Classe C # qui représente la structure d'objet de l'objet JSON transmis à WebMethod
public class User
{
public string name { get; set; }
public string teamname { get; set; }
public string email { get; set; }
public Array players { get; set; }
}
Réponses:
Un bon moyen d'utiliser JSON en C # est avec JSON.NET
Démarrages rapides et documentation API de JSON.NET - Site officiel vous aide à travailler avec.
Un exemple d'utilisation:
la source
Puisque nous aimons tous un code de doublures
Newtonsoft est plus rapide que le sérialiseur de script java. ... celui-ci dépend du package Newtonsoft NuGet, qui est populaire et meilleur que le sérialiseur par défaut.
si nous avons de la classe, utilisez ci-dessous.
pas de classe, puis utilisez dynamique
la source
Pour garder vos options ouvertes, si vous utilisez .NET 3.5 ou version ultérieure, voici un exemple résumé que vous pouvez utiliser directement à partir du framework à l'aide de Generics. Comme d'autres l'ont mentionné, s'il ne s'agit pas seulement d'objets simples, vous devriez vraiment utiliser JSON.net.
Tu auras besoin:
la source
Compte tenu de votre exemple de code, vous ne devriez rien faire d'autre.
Si vous transmettez cette chaîne JSON à votre méthode Web, elle analysera automatiquement la chaîne JSON et créera un objet utilisateur rempli en tant que paramètre de votre méthode SaveTeam.
Cependant, en règle générale, vous pouvez utiliser la
JavascriptSerializer
classe comme ci-dessous, ou pour plus de flexibilité, utilisez l'un des divers cadres Json (Jayrock JSON est un bon) pour une manipulation JSON facile.la source
System.Web.Extensions
assembly et ajouter unusing System.Web.Script.Serialization
pour y accéderJavaScriptSerializer
, mais une fois que vous le faites, cela semble être le moyen le plus propre de désérialiser vosjson
chaînes en classes concrètes c #.Une autre solution vraiment simple utilise la bibliothèque Newtonsoft.Json:
la source
Les 2 exemples suivants utilisent soit
Exemple 1: utilisation de System.Web.Script.Serialization
Utilisation: objet JSON en objet C # personnalisé
Exemple 2: utilisation de System.Web.Helpers
Utilisation: objet JSON en objet C # personnalisé
Ce code nécessite l'ajout de l'espace de noms System.Web.Helpers trouvé dans,
Ou
J'espère que cela t'aides!
la source
dynamic
types, vous n'obtenez pas de véritable vérification de type. Par exemple, si votre JSON contient"Name" : "Ahmed"
et que vous tapez mal "Nom" dans votre code C #, c'est une erreur d'exécution (bleh).Plus d'informations sur le lien suivant http://ishareidea.blogspot.in/2012/05/json-conversion.html
A propos ,
DataContractJsonSerializer Class
vous pouvez lire ici .la source
L'utilisation de JavaScriptSerializer () est moins stricte que la solution générique proposée: public static T Deserialize (string json)
Cela peut être utile lorsque vous transmettez json au serveur qui ne correspond pas exactement à la définition d'objet que vous essayez de convertir.
la source
En termes de performances, j'ai trouvé le sérialiseur de ServiceStack un peu plus rapide que les autres. Il s'agit de la classe JsonSerializer dans l'espace de noms ServiceStack.Text.
https://github.com/ServiceStack/ServiceStack.Text
ServiceStack est disponible via le package NuGet: https://www.nuget.org/packages/ServiceStack/
la source
JSON.Net est votre meilleur pari mais, selon la forme des objets et s'il existe des dépendances circulaires, vous pouvez utiliser JavaScriptSerializer ou DataContractSerializer.
la source
Le générateur de classe JSON C # sur codeplex génère des classes qui fonctionnent bien avec NewtonSoftJS.
la source
Sérialiseur JavaScript: nécessite
using System.Web.Script.Serialization;
Sérialiseur de contrat de données: nécessite
using System.Runtime.Serialization.Json;
- Le type générique T doit être sérialisable davantage sur le contrat de donnéesla source
Plutôt que d'envoyer comme un simple objet.
Créez une classe publique de propriétés accessible et envoyez les données à la méthode Web.
utilisez les mêmes noms de paramètres dans l'appel ajax pour envoyer des données.
la source