2 votes

Supprimez le caractère d'échappement lors de la sérialisation de l'objet dynamique

Cette question peut être en double, mais je n'ai pas trouvé de réponse satisfaisante, c'est pourquoi je pose la question.

Je travaille sur la sérialisation d'objets dynamiques. Lorsque je sérialise un objet dynamique, l'API renvoie la réponse comme

"{\"firstname\":\"prasanthi\",\"lastname\":\"kota\"}"

Je ne veux pas utiliser string.Replace ou RegexPattern. Y a-t-il un autre moyen de le faire ?

J'ai essayé JavaScriptSerializer, mais cela ajoute des guillemets avec des marques d'échappement (\"). Voici mon code :

    dynamic d = new ExpandoObject();
    d.firstname = "prasanthi";
    d.lastname = "kota"; 

   string serialized_info = JsonConvert.SerializeObject(d);

Mise à jour :

J'utilise serialized_info dans une autre partie de mon code. Je ne veux pas de barres obliques là-bas. Donc, je veux les supprimer avant.

J'ai essayé ce qui est mentionné dans les commentaires

dynamic x = new { firstname = "prasanthi", lastname = "kota" }; var serialized_info = JsonConvert.SerializeObject(x,Formatting.Indented);

cela affiche

"{\r\n  \"firstname\": \"prasanthi\",\r\n  \"lastname\": \"kota\"\r\n}"

Je ne pense pas que cela soit la réponse à ma question. Pouvez-vous me suggérer une autre façon de faire que string.replace ?

5voto

Marc Gravell Points 482669

Il n'y a aucun problème ici. Le \ n'apparaît que dans l'IDE comme aide au débogage - représentant la chaîne visuellement de la même manière que vous l'écririez en C#. Il ne contient en réalité pas le caractère d'échappement. Si vous utilisez :

Console.Write(serialized_info);

ou :

File.WriteAllText(path, serialized_info);

alors vous verrez un JSON correct normal. La chaîne littérale en C# :

"{\"firstname\":\"prasanthi\",\"lastname\":\"kota\"}"

est précisément la chaîne avec le contenu :

{"firstname":"prasanthi","lastname":"kota"}

2voto

David Zwart Points 76

Le problème actuel n'est pas clair. Vous voulez la chaîne sans marques d'échappement? Voulez-vous la chaîne sans guillemets? Je vais répondre aux deux.

  1. Sans marques d'échappement: Bien que vous affirmiez qu'il échappe aux barres obliques inverses, il échappe en fait aux guillemets car \" se traduit par " lors de l'impression dans un terminal (j'ai édité votre question). La marque d'échappement garantit que le guillemet est correctement représenté dans un fichier, un terminal de débogage, etc. Vous devez vérifier si la marque d'échappement disparaît à la destination finale (l'endroit où la chaîne est désérialisée/analysée). Je ne comprends pas pourquoi string.Replace(...) n'est pas adapté pour cela? Veuillez expliquer d'abord cela, car c'est votre solution pour le moment.
  2. Sans guillemets Les guillemets sont nécessaires pour le contenu sérialisé de type String. Vous pouvez essayer de supprimer les barres obliques avec string.Replace(...), mais cela supprimerait la fonction d'échappement, ce qui pourrait rendre la chaîne non reconnue en tant que telle par l'application finale. Cela peut également générer des erreurs lors de l'envoi des données à votre destination. Je vous conseillerais vivement de garder les guillemets.

[MODIFICATION suite à la MISE À JOUR] Si vous RENCONTREZ des problèmes d'analyse en raison de ces marques d'échappement, vous devriez donner un exemple où cela se produit, car le problème est à cet endroit et non ici. Veuillez clôturer la question s'il n'y a pas de problème...

1voto

Thymine Points 2198

Avoir votre API retourner simplement l'objet (ExpandoObject ou object), ou avoir qu'il retourne un ActionResult et faire return Json(d);

@dbc a lié une question de description complète dans les commentaires ci-dessus : https://stackoverflow.com/a/25559255/356218

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X