Convertir la Chaîne JSON Pour Objet de C#
D'essayer de convertir une chaîne JSON en objet en C#. Utiliser un simple cas de test:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Le problème est que routes_list n'est jamais ensemble; c'est un objet non défini. Des idées?
- J'ai vraiment recommander le
JavaScriptSerializer
plus de la MME version que de ne pas accepter quoi que ce soit d'autre, mais de la WCF JSON personnalisé mise en forme (par exemple, les champs de date qui ressemblent à des dates, mais ne sont pas entourés en DATE() échoue lamentablement) - Aussi, regarde ce Parsing JSON objets avec JavascriptSerializer dans .NET l'article, qui est en fait un bon tutoriel.
- Où en êtes-vous JavaScriptSerializer? Il n'est pas reconnu dans mon C# .NET 3.5 projet.
- L'argile Shannon Cela il résolu pour moi stackoverflow.com/questions/7000811/...
Vous devez vous connecter pour publier un commentaire.
Il semble que vous essayez de désérialiser un objet brut. Vous pouvez créer une Classe qui représente l'objet que vous êtes à la conversion de. Ce serait plus utile dans le cas où vous avez à traiter avec des objets de taille ou de Chaînes JSON.
Par exemple:
Alors votre désérialisation code serait:
Plus d'informations peuvent être trouvées dans ce tutoriel:
http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
Ou, vous pouvez utiliser le Newtownsoft.Librairie Json comme suit:
Où
T
est votre type d'objet qui correspond à votre chaîne JSON.Vous ne voulez pas de simplement déclarer routes_list comme un
object
type. Il n'a pas une .test de la propriété, alors vous vraiment ne vont pas à obtenir un bel objet. C'est un de ces endroits où vous feriez mieux de la définition d'une classe ou d'une structure, ou de faire utiliser le mot-clé dynamic.Si vous voulez vraiment que ce code fonctionne, comme vous l'avez, vous aurez besoin de savoir que l'objet retourné par DeserializeObject est un dictionnaire générique de la chaîne,de l'objet. Voici le code pour le faire de cette façon:
Si vous souhaitez utiliser le mot-clé dynamic, vous pouvez lire ici comment faire.
Si vous déclarez une classe ou structure, vous pouvez appeler Désérialiser au lieu de DeserializeObject comme suit:
object routes_list
. Utilisationvar
ou explicitement répéter et déclarer routes_list comme un IDictionary<string,object>.À l'aide d'objets dynamiques avec JavaScriptSerializer.
Newtonsoft est plus rapide que java script sérialiseur. ... celui-ci dépend de la Newtonsoft package NuGet, qui est populaire et mieux que le défaut de sérialiseur.
une seule ligne de code solution.
Voici une classe simple, j'ai bricolé à partir de différents postes.... Il a été testé pendant environ 15 minutes, mais semble de travailler pour mes fins. Il utilise
JavascriptSerializer
pour faire le travail, qui peut être référencé dans votre application en utilisant les informations détaillées dans ce post.Le code ci-dessous peut être exécuté dans LinqPad de le tester par:
Propriétés de"
"Le système de.Web.Script.La sérialisation".
Espère que cela aide!
Vous pouvez accompli votre exigence facilement à l'aide de Newtonsoft.Librairie Json. Je suis en train d'écrire un exemple ci-dessous ont un regard sur elle.
Classe pour le type d'objet que vous recevez:
Code:
c'est un moyen très simple pour analyser votre json.
ajouter cette ddl de référence à votre projet: System.Web.Extensions.dll
utiliser cet espace de noms: en utilisant le Système.Web.Script.La sérialisation;
Comme tripletdad99 dit
mais si vous ne voulez pas créer un objet supplémentaire, vous pouvez le faire avec
Dictionary
au lieuCopie de votre Json et coller sur la zone de texte sur json2csharp et cliquez sur le bouton Générer.
Un cs classe sera généré utiliser que le cs fichier comme ci-dessous
Où
RootObject
est le nom de l'généré cs fichier;Un autre moyen facile et rapide de semi-automatiser ces étapes est de:
Maintenant utiliser le code:
Convertir une chaîne JSON en objet en C#. À l'aide de ci-dessous de cas de test.. sa a fonctionné pour moi. Ici "MenuInfo" est mon C# la classe de l'objet.
D'abord, vous devez inclure la bibliothèque comme: