Maison > développement back-end > Tutoriel C#.Net > Comment résoudre le problème de l'échec de la désérialisation des valeurs d'attribut ?

Comment résoudre le problème de l'échec de la désérialisation des valeurs d'attribut ?

零下一度
Libérer: 2017-06-23 16:22:11
original
4340 Les gens l'ont consulté

Introduction : Lorsque je développais l'interface webapi, j'ai rencontré : Lorsqu'une chaîne Json complexe est désérialisée en un objet, l'un des objets d'attribut ne peut pas être sérialisé ?

Utilisation :

InternalRecommendRequestFormModel formData = Newtonsoft.Json.JsonConvert.DeserializeObject<InternalRecommendRequestFormModel>(dataInput);
Copier après la connexion

Parmi eux : InternalRecommendRequestFormModel est un objet complexe et ses propriétés contiennent d'autres objets et propriétés. dataInput est la chaîne JSON transmise par l'interface, qui est l'objet InternalRecommendRequestFormModel renvoyé par une autre interface. Bien sûr, certaines propriétés des données ont changé au cours du processus de transmission. Elles doivent être désérialisées normalement, mais elles sont désérialisées lorsqu'elles sont utilisées. une erreur est signalée et l'un des attributs ne peut pas être sérialisé.

Alors, que devons-nous faire lorsque nous rencontrons une désérialisation aussi complexe en objets ?

Tout d'abord : l'analyse montre que l'erreur est causée par l'échec de la sérialisation d'attributs individuels, donc tant que ces attributs peuvent être effacés ou que le contenu sérialisé de l'attribut peut être supprimé, tout ira bien.

Alors : Comment supprimer certains attributs de la chaîne JSON sérialisée ?

La première chose à laquelle on pense est le remplacement des cordes, l'effacement, l'interception, etc., mais il est facile de faire des erreurs. Pouvons-nous transformer cette chaîne en un objet exploitable (bien sûr pas InternalRecommendRequestFormModel), puis tuer ou effacer un objet, puis le convertir en l'objet souhaité ? En fait, lorsque j’ai pensé pour la première fois à un objet, n’importe quel objet n’est-il pas un objet ?

Commencez à essayer :

object formData = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(dataInput);
Copier après la connexion

L'objet obtenu est le suivant :

Découvert lors du débogage :

((Newtonsoft.Json.Linq.JObject)(JsonConvert.DeserializeObject(dataInput))).ChildrenTokens[46], je peux obtenir la valeur de l'attribut.

En d'autres termes, comme le montre le code ci-dessus, l'objet objet désérialisé est converti en : Objet Newtonsoft.Json.Linq.JObject Cet objet est une classe de base de l'objet JSON fourni par Microsoft. , c'est-à-dire que tant que vous êtes un objet, s'il est sérialisé par json, cela peut vous aider à le désérialiser.

Le code est amélioré à :

InternalRecommendRequestFormModel formData = new InternalRecommendRequestFormModel();Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);
obj.Remove("opinions");
formData = obj.ToObject<InternalRecommendRequestFormModel>();
Copier après la connexion

Résumé :

Tant que la chaîne JSON est un objet, lorsque nous désérialisons directement et constatons que certaines valeurs d'attribut dans la chaîne ne répondent pas aux exigences, nous pouvons d'abord convertir l'objet en : JObject, corriger les attributs de l'objet , puis utilisez JObject pour fournir ToObject() puis convertissez-le en objet qui doit être converti

<strong><span style="font-size: 15px">Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);</span></strong><br>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal