88 votes

Quelle est la différence entre DataContractJsonSerializer et JavaScriptSerializer?

L' .NET Framework est livré avec le Système.Moment de l'exécution.La sérialisation.Json.DataContractJsonSerializer et du Système.Web.Script.La sérialisation.JavaScriptSerializer, qui dé-sérialiser JSON. Comment savoir quand je dois choisir l'un de ces types de rapport à l'autre? MSDN n'est pas clairement quels sont leurs avantages relatifs.

Nous avons plusieurs projets qui consomment ou émettent JSON, et la classe sélectionnée pour chaque jusqu'à présent, dépend de l'avis de la primaire dev sur chaque projet. Certaines sont simples, les deux ont une logique complexe qui concerne la production de types managés de JSON (les types ne correspondent étroitement au cours d'eau), mais n'ont pas l'accent sur la vitesse, on a besoin de vitesse. Aucun interagir avec WCF, au moins à partir de maintenant.

Alors que je suis intéressé par les autres bibliothèques, je suis en espérant que quelqu'un peut avoir une réponse à ma question.

68voto

Bahri Gungor Points 1411

Le DataContractJsonSerializer est conçu pour être utilisé avec WCF client les applications où la sérialisé types sont généralement des classes POCO avec le DataContract attribut appliqué. Pas de DataContract, pas de sérialisation. Le mécanisme de cartographie de la WCF permet l'envoi et la réception très simple, mais seulement si votre plate-forme est homogène. Si vous commencer à mixer dans différents ensembles d'outils, votre programme peut aller sur le côté.

Le JavaScriptSerializer pouvez sérialiser n'importe quel type, y compris les types anonymes (d'une manière), et n'est donc plus conforme. Vous perdez le "automagique" de la WCF, mais vous aurez plus d'options d'intégration.

Comme vous pouvez le voir par les commentaires, il ya beaucoup d'options là-bas pour l'AJAX de sérialisation, et à l'adresse de votre vitesse par rapport à la maintenabilité des questions, il pourrait être intéressant de les étudier afin de trouver une solution qui répond aux besoins de toutes les équipes, afin de réduire la maintenabilité des problèmes à long terme que tout le monde fait les choses à leur manière.

2014-04-07 mise à JOUR: Je suggère d'utiliser JSON.NET si vous le pouvez. Voir http://james.newtonking.com/json Comparaison des fonctionnalités pour un examen de la 3 bibliothèques considéré dans cette question.

21voto

achekh Points 404

Les deux approximativement le même, mais en utilisant très différentes infrastructures ainsi à l'application de différentes restrictions sur les classes que vous souhaitez pour sérialiser/désérialiser et offrant différents degrés de souplesse dans le réglage de la sérialisation/désérialisation processus.

Pour DataContractJsonSerializer vous devez marquer toutes les classes que vous souhaitez à l'aide de sérialiser DataContract atrtibute et de tous les membres à l'aide d' DataMember d'attribut. Ainsi que si certains d'entre vous les classes ont enum membres, les énumérations, aussi, doit être marqué en DataContract et chaque membre enum - avec EnumMemberd'attribut. Aussi DataContractJsonSerializer vous permet de contrôler l'ensemble du processus de sérialisation/désérialisation en modifiant les types de résolution de la logique et de remplacer les types de sérialisation avec des mères porteuses.

Pour JavaScriptSerializer vous devez fournir un constructeur sans paramètre si vous prévoyez de la désérialisation d'objets de chaîne json.

Pour moi, j'ai l'habitude d'utiliser JavaScriptSerializer dans la logique de présentation, où il y a un modèle simple je veux rendre en Json avec la page, sans que d'autres requêtes ajax. Et j'ai même l'habitude de ne pas avoir à désérialiser les ramener à c# - donc il n'y a pas de frais généraux. Mais si c'est la persistance de la logique, où je veux enregistrer des objets dans un magasin de données (généralement non-sql de stockage), à la charge plus tard, je préfère utiliser l' DataContractJsonSerializer en raison de la surcharge de mettre les attributs de la valeur de la flexibilité dans la sérialisation/désérialisation processus de réglage, en particulier quand il s'agit de chargement de données sérialisées dans les objets de la version la plus récente, avec les définitions mises à jour

2voto

JP Richardson Points 11920

Personnellement, je pense qu' DataContractJsonSerializer des relents de la plus-ingénierie. J'aimerais sauter et aller de l' JavaScriptSerializer. Dans le cas où l' JavaScriptSerializer n'est pas disponible, vous pouvez utiliser FridayThe13th (une bibliothèque que j'ai écrit ;p).

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