2009-01-31 4 views
1

J'ai un problème avec la sérialisation. La classe en question représente un paquet réseau et possède un tableau d'octets associé pour la charge utile, qui peut être nul. J'ai exposé cela en utilisant les méthodes GetData et SetData conformément aux recommandations de Microsoft Framework Design Guidelines, car pour éviter une crosstalk bizarre, la lecture et l'écriture de la matrice impliquent de la copier plutôt que de passer une référence. Les directives suggèrent Get/Set quand il y a des effets significatifs tels que la création d'objet, et c'est ce que j'ai fait.Sérialiser un état qui n'est PAS exposé en tant que propriété

Malheureusement, cela a eu pour conséquence que le membre interne n'est pas sérialisé. Le membre est marqué protégé. En dehors de l'exposer comme une propriété publique, comment puis-je faire en sorte que cela soit sérialisé lorsque l'objet est passé du serveur au client par un service Web?

Répondre

3

(edit: suppose l'utilisation du Web, le protocole en question ne sait pas d'origine)

Pouvez-vous utiliser WCF? Le DataContractSerializer soutient les membres non-publics:

[DataContract] 
class Foo { 
    [DataMember] // can also be used on a field - not just properties 
    private int Bar {get;set;} // or internal or protected 
} 

Sinon, vous devrez considérer simplement un DTO, et rendre public la propriété.

Autres options - sérialisation binaire? BinaryFormatter n'est pas portable entre les plates-formes (donc pas idéal pour tous les services Web), mais des choses comme protocol buffers sont plus conviviales. Mais il n'y a pas de support WDSL pour cela, ni de pile IPC (ce sont des données brutes uniquement).

+0

Pouvez-vous faire cela? (Mettez DataMember sur un membre privé) J'étais juste en train de mettre en place pour essayer ça! - et il fonctionne! HOURRA! VOUS OBTENEZ LES POINTS! –

Questions connexes