2010-10-07 4 views
2

J'ai vu de nombreuses façons de sérialiser des objets en C# que je ne suis pas sûr de savoir lequel utiliser et quand.Quel est le moyen privilégié pour implémenter des classes sérialisables en C#

Dans la situation actuelle, je sérialisation pour l'exposition via WCF, donc je suppose que l'attribut [DataContract] est la voie à suivre.

Actuellement, je lis dans du code XML, puis j'expose l'objet résultant via WCF. Je désérialise donc XML pour lequel je n'ai pas accès aux classes d'origine (donc je reconstruis la classe et je peux mettre en œuvre la sérialisation comme je le souhaite). Ensuite, il doit être sérialisable pour la WCF.

Mais si [DataContract] est bon pour ce cas, pourquoi ne l'utiliserais-je pas tout le temps au lieu de ISerializable, ou de l'attribut [Serializable]?

Donc, un peu de deux questions en une, ce qui à utiliser pour ce problème, et pourquoi existe-t-il différentes façons de sérialiser.

Répondre

2

DataContract est un bon point de départ pour la sérialisation de base. Mais si vous voulez contrôler exactement la manière dont l'objet est sérialisé, utilisez l'interface ISerializable. En outre, l'attribut de contrat de données n'est pas hérité, mais l'ISerializable va

ISerializable a été autour depuis .net 1.1. DataContract a été introduit dans .net 3.0 pour simplifier la sérialisation dans la plupart des cas.

2

En utilisant ISerializable, en mettant en œuvre GetObjectData, vous pouvez personnaliser la façon dont un objet est sérialisé/désérialisé au sein de la classe de l'objet sans avoir à créer un sérialiseur

Si vous créez un service WCF, je pense que vous devriez en tenir à DataContract . Un de ses grands avantages est le mécanisme opt-in (c'est-à-dire sans mauvaises surprises).