2009-08-26 8 views
22

Comment décoder une réponse json dans C#?Décodage JSON dans C#

+0

« le tableau »: quelle matrice parlez-vous? –

+0

Consultez aussi http://stackoverflow.com/questions/2246694/how-to-convert-json-object-to-custom-c-sharp-object un des exemples vers les références du bas 'Json.Decode()' de 'System.Web.Helpers' que j'ai utilisé avec succès dans le passé. –

+0

Fermeture d'une question, après 4 ans, attendez ... c'est SO. –

Répondre

22

Consultez le DataContractJsonSerializer. Vous devrez cibler .NET 3.5, ce qui signifie que Visual Studio 2008 est requis. Here's a good blog post à propos de l'utilisation du sérialiseur de contrat de données Json.

+2

haha ​​m'a battu de 20 secondes! –

+1

La [version .Net 4 de DataContractJsonSerializer] (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx) est disponible. – MrBry

5
+0

J'étais en train de taper check out, mais j'ai fait une erreur de frappe et j'ai refait toute la ligne. lol –

+1

merci à tous .. je ne suis pas beaucoup familier avec. Net et besoin d'utiliser une donnée json. Donc, il sera utile si quelqu'un peut donner un exemple de code indiquant comment décoder les données json – raki

3

Les classes intégrées .NET ont leurs mérites. Mais ils ont leurs défauts. Par exemple, DataContractJsonSerializer n'est pas disponible dans .NET 2.0, System.Web.Extensions nécessite des droits d'administrateur pour l'installer (dans NET 2.0 - vous pouvez le copier localement, si vous n'avez pas de projet WebSite) plus Ne travaillez pas avec SilverLight et WindowsPhone. Si vous avez un projet WebSite, vous devez copier les assemblys System.Web.Extensions dans votre projet, puis les supprimer de GAC, sinon VisualStudio ne comprend pas qu'il doit les copier localement.

Mais plus important encore, si vous travaillez avec à peu près n'importe quelle bibliothèque JavaScript, par ex. SlickGrid (GRID AJAX), vous tomberez sur cet objet JavaScript valide (mais il est JSON invalide, parce que fnFormatDate_DE est un appel de fonction et non du texte, il manque les guillemets):

FormatterCallback : 
{ 
    name : "DateFormatter_DE" 
    func: fnFormatDate_DE(val) 
} 

Aucune chance de sérialiser avec l'une des classes intégrées .NET (parce que c'est JSON invalide). En outre, ils sont insuffisants en termes de performances, de disponibilité dans SilverLight, Windows Phone et WindowsRT. Ils ne sont ni OpenSource ni MIT. Ils ne supportent pas l'indentation (JSON lisible par un humain), et ils ne peuvent pas sérialiser les DataTables, et ils ont des problèmes avec les références circulaires. Vous ne pouvez pas gérer les erreurs de sérialisation avec eux, ne pouvez pas sérialiser les enums à leurs noms, et vous ne pouvez pas changer le format de date (OK, ce n'est pas vraiment un problème, car le format date est le seul format de date crap comprend [il ne pas undestand ISO]), et ils ne sérialisent ni nHibernate ni Entité ...

Mais surtout, vous ne voudrez pas changer votre bibliothèque ou ajuster les références de projet si vous allez de .NET 2.0 à 4.0, vous ne voulez pas réécrire votre code si vous voulez utiliser du code dans SilverLight/Windows Phone, et vous ne voulez pas écrire une fonction pour embellir JSON si vous voulez regarder si vous avez le droit de classe, et vous ne voudrez pas écrire votre propre méthode pour éliminer les guillemets juste parce que les bibliothèques de Microsoft ne peuvent pas gérer JSON invalide.

De plus, les bibliothèques de Microsoft ont de faibles performances et ne peuvent pas être sérialisées en BSON (pour une utilisation avec des bases de données NoSQL comme MongoDB).
Pour toutes ces raisons, il vaut mieux choisir NewtonSoft JSON (JSON.NET).
C'est gratuit et OpenSource (MIT license, pas GPL).
Il y a une matrice de comparaison bien ici:
http://james.newtonking.com/pages/json-net.aspx

+0

Going by: https://github.com/dotnet/corefx-progress/blob/master/src-diff/README.md, 'System.Runtime.Serialization.Json' sera open-source et disponible dans corefx repo: https://github.com/dotnet/corefx (sous licence MIT, comme toutes les autres bibliothèques .NET débarquées ici). –