Maison >développement back-end >C++ >Pourquoi ma sérialisation JSON.NET produit-elle des cordes JSON à double codage?

Pourquoi ma sérialisation JSON.NET produit-elle des cordes JSON à double codage?

Susan Sarandon
Susan Sarandonoriginal
2025-01-24 21:41:09582parcourir

Why is my JSON.NET Serialization Producing Double-Encoded JSON Strings?

Problème de sérialisation JSON.NET

Aperçu du problème

Lors de l'utilisation de la méthode JsonConvert.SerializeObject de JSON.NET, l'objet est double-sérialisé, ce qui entraîne une réponse JSON incorrecte. La réponse est entourée de guillemets et les guillemets intégrés sont échappés, ce qui entraîne un JSON non valide.

Racines

Ce problème se produit généralement lors du renvoi d'une chaîne d'un contrôleur WebAPI qui a été sérialisée à l'aide de JSON.NET. Le contrôleur sérialise ensuite en outre la chaîne en une chaîne littérale JavaScript, ce qui entraîne une double sérialisation.

Solution

Pour résoudre ce problème, renvoyez directement l'objet lui-même au lieu de la chaîne. En faisant cela, le contrôleur API gérera la sérialisation en fonction des paramètres de la requête, permettant à JSON.NET de sérialiser correctement l'objet. Cela élimine la double sérialisation et garantit que la réponse JSON générée est valide.

Exemple

<code class="language-csharp">// 原代码:双重序列化
public string GetFoobars() {
    var foobars = ...;
    return JsonConvert.SerializeObject(foobars);
}

// 更新后的代码:直接返回对象
public IEnumerable<Foobar> GetFoobars() {
    var foobars = ...;
    return foobars;
}</code>

En mettant à jour le type de retour avec le type réel de l'objet en cours de sérialisation, le contrôleur sérialisera le résultat de manière appropriée, résolvant ainsi le problème de double sérialisation.

Informations complémentaires

Pour plus d'informations sur la sérialisation dans WebAPI, veuillez vous référer aux ressources suivantes :

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!

Déclaration:
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