2010-11-17 6 views
1

J'utilise SubSonic 2 depuis un moment maintenant, mais comme je commence un nouveau projet, j'aimerais passer à 3. Dans mon ancien projet, j'ai utilisé un custom, non piratage durable pour sérialiser les choses pour les services Web. Je voudrais vraiment trouver une solution plus élégante.Sérialisation sélective avec les classes générées par SubSonic

J'utilise Mono, donc je dois rester dans les classes implémentées, par ex. DataContractSerializer est probablement hors. Toujours sur ASMX, mais aimerait passer à WCF dès que le support est solide. Moonlight/Silverlight seront les premiers clients. JSON/protobuf dans le futur ...

Le sérialiseur Xml standard est opt-out, donc j'aurais besoin d'un moyen de prendre le contrôle de celui-ci. Ce qui m'amène à IXmlSerializable. Je ne suis pas familier avec les templates de SS, mais il semblerait que leur édition me permettrait de générer le code de sérialisation nécessaire pour ne pas toucher le reste de la chaîne de la hiérarchie. Est-ce une bonne idée"?

J'aimerais utiliser le support POCO de SS, mais je ne pense pas qu'il supporte des types ou des tableaux complexes.

Autres idées/options?

Répondre

1

IXmlSerializable est IMO plus qu'un peu difficile à obtenir. Notez que si vous manipulez vous-même le code XmlSerializer, vous pouvez surcharger tout à l'exécution en utilisant le constructeur qui accepte XmlAttributeOverrides (mais si vous l'utilisez, vous devriez mettre en cache et réutiliser l'instance XmlSerializer, sinon il coulera comme un tamis). Vous mentionnez brièvement protobuf; noter que protobuf-net (même en v1) vous permet d'ajouter des données de sérialisation au niveau des membres au niveau du type , de sorte que vous pouvez inclure cette information dans une classe partielle à côté d'un type généré:

// file 1 
partial class GeneratedClass 
{ 
    public int Foo { get; set; } 
    public string Bar { get; set; } 
} 
// file 2 
[ProtoPartialMember(1, "Foo")] 
[ProtoPartialIgnore("Bar")] 
partial class GeneratedClass {} 
+0

Merci Marc, grand fan de votre mise en œuvre protobuf, fou rapide. Bien que je puisse contrôler la sérialisation manuellement, la fin de jeu est que d'autres personnes pourraient également utiliser les services Web. J'espérais avoir une approche plus automagique, par ex. l'utilisateur est présenté avec un XSD/WSDL qui ne mentionne pas le reste de la hiérarchie SS. Ensuite, ils génèrent leurs classes et ainsi de suite. – joe

+0

@joe - dans ce cas, je vous recommande simplement de créer une couche DTO séparée * similaire * aux types SS, mais sous votre commande directe. –

+0

C'était ma solution de contournement originale. :) Bien que je l'ai fait à la main, ce que je voulais dire par insoutenable. Je suppose que ça pourrait être plutôt automatique avec les templates SS hein? Je vais essayer cela et afficher les résultats. – joe

Questions connexes