J'ai le code suivant:
var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);
L'entrée dans responsecontent
est JSON, mais elle n'est pas correctement analysée dans un objet. Comment dois-je le désérialiser correctement?
Json
dansSystem.Web.Helpers
, il y aJsonQueryStringConverter
dansSystem.ServiceModel.Web
, il y aJavascriptSerializer
dansSystem.Web.Script.Serialization
,DataContractJsonSerializer
dansSystem.Runtime.Serialization.Json
, Heck MS a même décidé d'inclure un tiersJson.NET
dans son API Web ASP.NET. Si vous pensiez que cela ne suffisait pas, la SEP arrive,System.Json
mais est actuellement impropre à la consommation. Way to go Microsoft way to go .... Je choisis par le plus bel espace de noms.JsonValue
dans ceWindows.Data.Json
qui est uniquement pour Windows 8 et plus. J'adore ça. MS est en mission :)Réponses:
Je suppose que vous n'utilisez pas Json.NET (package Newtonsoft.Json NuGet). Si tel est le cas, vous devriez l'essayer.
Il présente les caractéristiques suivantes:
Regardez l' exemple ci-dessous. Dans cet exemple, la
JsonConvert
classe est utilisée pour convertir un objet vers et depuis JSON. Il a deux méthodes statiques à cet effet. Ils sontSerializeObject(Object obj)
etDeserializeObject<T>(String json)
:la source
var
variable de type, dans le cas où je ne connais pas la structure complète de mon objectif? Plus précisément, je consomme des histoires d'utilisateurs de rallye et je souhaite les convertir en objets.JSON.parse('{"Expiry": "2008-12-28T00:00:00"}').Expiry
renvoie la chaîne"2008-12-28T00:00:00"
, pas une date. il peut être transformé en unDate
vianew Date(str)
, maisJSON.parse
ne sait rien sur les dates. Vous devez passer un reviver qui vérifie chaque valeur de chaîne par rapport à un modèle.require
,include
,import
ou desusing
déclarations dans leurs réponses. Est-ce que cette ligne ferait mal?Comme il a été répondu ici - Désérialiser JSON en objet dynamique C #?
C'est assez simple en utilisant Json.NET:
Ou en utilisant Newtonsoft.Json.Linq:
la source
object
, et vous ne pouvez pas utiliser l'indexation sur un fichierobject
.Voici quelques options sans utiliser de bibliothèques tierces:
Voir le lien pour plus d'informations sur System.Web.Helpers.Json .
Mise à jour : De nos jours, le moyen le plus simple d'obtenir le
Web.Helpers
est d'utiliser le package NuGet .Si vous ne vous souciez pas des versions antérieures de Windows, vous pouvez utiliser les classes de l'
Windows.Data.Json
espace de noms:la source
Si .NET 4 est à votre disposition, consultez: http://visitmix.com/writings/the-rise-of-json (archive.org)
Voici un extrait de ce site:
Cette dernière Console.WriteLine est assez douce ...
la source
Une autre solution native à cela, qui ne nécessite aucune bibliothèque tierce mais une référence à System.Web.Extensions est JavaScriptSerializer. Ce n'est pas une nouveauté mais une fonctionnalité intégrée très inconnue depuis la 3.5.
..
et retour
la source
Vous pouvez également consulter le DataContractJsonSerializer
la source
System.Json fonctionne maintenant ...
Installez nuget https://www.nuget.org/packages/System.Json
Échantillon :
la source
Utilisez cet outil pour générer une classe basée sur votre json:
http://json2csharp.com/
Et puis utilisez la classe pour désérialiser votre json. Exemple:
Références: https://forums.asp.net/t/1992996.aspx?Nested+Json+Deserialization+to+C+object+and+using+that+object https://www.newtonsoft.com/json/help /html/DeserializeObject.htm
la source
Essayez le code suivant:
la source
System.Text.Json
.NET core 3.0 est livré avec
System.Text.Json
ce qui signifie que vous pouvez désérialiser / sérialiser JSON sans utiliser de bibliothèque tierce.Pour sérialiser vos classes en chaîne JSON:
Pour désérialiser le JSON en une classe fortement typée:
Donc, si vous avez une classe comme ci-dessous:
Une chose à noter est que
System.Text.Json
ne gère pas automatiquementcamelCase
les propriétés JSON lors de l'utilisation de votre propre code (cependant, il le fait lors de l'utilisation des requêtes MVC / WebAPI et du classeur de modèle).Pour résoudre ce problème, vous devez passer
JsonSerializerOptions
en paramètre.System.Text.Json est également disponible pour .Net Framework et .Net Standard en tant que package Nu-get System.Text.Json
la source
JsonDocument.Parse
.Les éléments suivants du site msdn devraient, je pense, aider à fournir des fonctionnalités natives pour ce que vous recherchez. Veuillez noter qu'il est spécifié pour Windows 8. Un exemple du site est répertorié ci-dessous.
Il utilise l' espace de noms Windows.Data.JSON .
la source
Vous pouvez utiliser les extensions suivantes
la source
Je pense que la meilleure réponse que j'ai vue a été @MD_Sayem_Ahmed.
Votre question est "Comment puis-je analyser Json avec C #", mais il semble que vous souhaitiez décoder Json. Si vous voulez le décoder, la réponse d'Ahmed est bonne.
Si vous essayez d'accomplir cela dans ASP.NET Web Api, le moyen le plus simple consiste à créer un objet de transfert de données qui contient les données que vous souhaitez affecter:
Vous avez simplement ajouté l'en-tête application / json à votre demande (si vous utilisez Fiddler, par exemple). Vous utiliseriez ensuite cela dans l'API Web ASP.NET comme suit:
Cela m'a beaucoup aidé lorsque je travaillais dans mon Web Api et m'a rendu la vie super facile.
la source
la source
la source
System.Web
dans vos références de projet.la source