2010-08-11 6 views
4

Nous avons probablement besoin d'écrire nos propres sérialiseurs pour les classes dans notre application (large) C# - BinarySerializer est trop lent et prolixe, et protobuf-net a des problèmes avec les propriétés d'interface (de que nous avons des charges).Implémentation de nos propres sérialiseurs dans C# - astuces et getchas

Quelqu'un at-il de bons conseils et/ou mises en garde? Je suppose que nous devrions utiliser BinaryWriter et BinaryReader, mais nous n'avons pas encore fait grand-chose en C#, et tout ce que nous aimerions obtenir serait apprécié!

De même, personne ne sait d'un sérialiseur roulé à la main avec le code source que je pourrais regarder?

+0

Quelles sont vos échelles de temps? Je peux essayer d'arrondir v2 (mais je le dis depuis trop longtemps déjà) –

+0

Qu'en est-il de 'DataContractSerializer'? –

+0

@Marc: ce serait génial, mais probablement pas assez rapide pour nous, compte tenu du temps pour nous apprendre à protobuffer correctement. –

Répondre

0

Tenir compte Type Convertors. Nous les utilisons beaucoup avec ViewState et ils fonctionnent très bien.

+0

de ne pas aller sur une tangente - mais l'injection des objets sérialisés dans ViewState est la chose la plus horrible que je l'ai entendu aujourd'hui –

+0

Pete - Thats ce ASP.net fait aussi pour maintenir l'état accross dos de poste. Thats ce que ViewState est pour. – Fahad

3

Conseils/avertissements? Ce peut être un sérieux quantité de code. Je suggère qu'il serait plus facile d'écrire une code simple qui transforme votre modèle existant en une simple DTO qui peut être sérialisé trivialement par votre choix de l'API de sérialisation existant. Avoir une couche DTO (séparée des entités de domaine) permet également une maintenance beaucoup plus simple - vous pouvez refactoriser vos entités de domaine sans casser les données sérialisées.

Les options pour le faire vous-même (en gardant à l'esprit que vous avez souligné que le modèle est assez complexe, et vous n'êtes pas peu-violoneux):

  • écriture sérialisation spécifique de type manuellement; très facile à se tromper, très laborieux
  • écrire une bibliothèque à usage général; des quantités folles de travail résoudre tous les cas de pointe

Et c'est après vous avez trouvé un format de sérialisation qui fonctionne avec vigueur, de manière extensible, et prend en charge les scénarios dont vous avez besoin (héritage, etc.).

+0

Nous ne sommes pas des violonistes * C# *; En fait, je ne suis pas du tout, mais mes collègues le sont certainement. –

+0

Je ne vois pas comment une couche DTO accélèrerait la sérialisation. Le problème réside vraisemblablement avec la verbosité inhérente du .Net BinarySerializer, avec toute la réflexion géniale et ainsi de suite, il doit faire pour travailler de manière générique. Cela ne changerait pas avec une couche DTO, n'est-ce pas? –

+0

@Joel - bien, peut-être si le DTO a été conçu pour convenir à protobuf-net, p –

Questions connexes