3

Il semble que DataContractSerializer ne soit pas disponible dans .NET Compact Framework. J'ai trouvé cela assez surprenant, car je considère DataContractSerializer comme le Saint Graal de la sérialisation, et l'une des classes les plus utiles introduites dans .NET 3.DataContractSerializer manquant dans le .NET Compact Framework

Y at-il un moyen d'obtenir la même fonctionnalité dans le cadre compact, c'est-à-dire, la possibilité de sauvegarder et de restaurer facilement des graphes d'objets réels en utilisant un format textuel? Je préférerais rester loin des sérialiseurs .NET plus anciens et limités tels que XmlSerializer et BinarySerializer.

Je pense peut-être qu'il existe une implémentation personnalisée de DataContractSerializer disponible, ou peut-être qu'il est possible d'utiliser le code de Mono? Quelqu'un at-il essayé de le faire?

+0

(J'ai ajouté quelques réflexions sur vos commentaires, ce commentaire juste pour le faire apparaître sur votre liste ;-p) –

Répondre

3

N'est-il pas disponible en CF 3.5? (edit: non, j'ai vérifié - en effet ce n'est pas le cas). Je sais que XmlSerialzier est là, mais oui, il y a des limites.

Faut-il utiliser du texte? Sur l'option est protobuf-net, qui fonctionne sur CF2.0, CF3.5, Silverlight, Mono, .NET 2.0, etc; et comprend toutes les choses dont vous avez habituellement besoin (y compris les rappels, etc.).

Par ailleurs, le code Mono (de "Olive") est, la dernière fois que je regardais, pas très complet ...

(modifier) ​​Une autre option pourrait être Json.NET; de here, cela fonctionne maintenant sur CF; Puisque c'est JSON, il est basé sur du texte, et devrait faire la plupart de ce dont vous avez besoin.

+0

Merci! Cela doit être basé sur le texte, car j'ai trouvé que c'était la seule façon de refactoriser mon code tout en conservant les données intactes, même à travers les changements d'espace de noms, les restructurations de classes, etc. réparer avec des fichiers texte. – Hermit

+0

J'essaie Json.NET, jusqu'à présent, je n'ai pas réussi à le désérialiser correctement. Il ne semble pas enregistrer d'informations de type, donc je ne peux pas voir comment il va gérer, disons, les interfaces. Peut-être qu'il y a une option quelque part, je vais continuer à chercher ... – Hermit

+1

Re namespace/class etc - notez que protobuf-net a * no * information de nom; J'ai des utilisateurs qui l'utilisent avec une IL obfusquée (c'est-à-dire des membres comme AA1.aB) et cela fonctionne très bien. Cependant, il ne gérera pas les données basées sur l'interface, mais seulement des types concrets. Peut-être que ça vaut le coup d'oeil, cependant. –

0

Je ne sais pas s'il est juste d'appeler le XmlSerializer "limité". Que veux-tu dire par là? L'avez-vous utilisé et trouvé qu'il le voulait? Quelle est la chose spécifique qui échoue pour vous? Dans mon expérience, XmlSerializer a réellement une capacité plus riche que le DCS. Le DCS fait moins, ce qui est probablement une bonne chose. D'un autre côté, le DCS fait au moins une chose que le XmlSerializer ne fait pas - c'est-à-dire qu'il peut sérialiser directement vers et à partir de variables membres privées. Le XmlSerializer est rapide et très capable, et vous pouvez en tirer un bon usage.

+0

J'ai essayé XmlSerializer et l'ai trouvé inutilisable pour mes besoins. Problèmes principaux: 1. il ne peut pas gérer les interfaces ou les classes dérivées 2. il vous force à créer des propriétés publiques de lecture/écriture pour toutes les données, même si elles doivent être privées ou en lecture seule. Voir mon commentaire ci-dessous pour les liens sur ces points. – Hermit

+0

http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx) et http://www.danrigsby.com/ blog/index.php/2008/03/07/xmlserializer-vs-datacontractserializer-sérialisation-en-wcf / – Hermit

0

trouvé une solution :-)

Il y a un sérialiseur XML à http://www.codeproject.com/KB/XML/GR_CustomXmlSerializer.aspx. Comme c'est le cas, le code ne fonctionne pas sur le Compact Framework, mais j'ai fait plusieurs ajustements triviaux pour le faire fonctionner, avec seulement une perte mineure de fonctionnalités. J'ai également utilisé OpenNetCF pour remplir quelques pièces CF manquantes.

Questions connexes