11
votes

Pourquoi ne puis-je pas utiliser DataContract WCF et ISerializable sur la même classe?

J'ai une classe que je dois être capable de sérialiser avec une variable de session SQLServer et d'être disponible sur un service WCF. Je l'ai dit comme suit xxx

mais lorsque j'essaie d'appeler ce service, je reçois l'erreur suivante dans le journal de trace.

"System.Runtime.Serialization.InvalidDatacontractException: Taper 'BarproxyBCB100E8617F40CEAA832FE4BB94533C' ne peut pas être isérialisable et avoir Attribut DatacontractAttribute. "

Si je sortez l'attribut Serializable, le service WCF fonctionne, mais lorsque l'objet ne peut pas être sérialisé à la session. Si je supprimais l'attribut Datacontract de la barre de classe, le service WCF échoue à dire

type 'Barproxy3bb05a31167f4ba492909ec941A54533' avec nom de contrat de données 'Barproxy3bb05a31167f4ba492909ec941A54533: http://schemas.datacontract.org/2004/07/ ' n'est pas attendu. Ajouter des types non connu statiquement à la liste de connue Types - Par exemple, en utilisant le Attribut connu detypeattribute ou par les ajoutant à la liste des types connus passé à DatacontractSerializer

J'ai essayé d'ajouter un attribut connu de la classe FOO xxx

mais j'ai toujours la même erreur.

peut Quelqu'un m'aida-t-il avec ça?

Merci beaucoup

Dave


0 commentaires

3 Réponses :


7
votes

Cette question sur MSDN pourrait aider: Datacontract contre Serializable .

La réponse acceptée de ce fil:

  1. [Datacontract] et [Serializable] peut être utilisé ensemble.

  2. DatacontractSérialiseur comprend les deux. Si le type est marqué avec les deux, il prendra la projection de [DataContract]

  3. Voici les documents sur le transfert de données et la sérialisation dans WCF qui fournissent beaucoup de détails sur les sérialiseurs et le type connu: Transfert de données et sérialisation


4 commentaires

Merci - à la fin, ce que j'ai fait était de faire des copies de mes cours et de les revenir à travers le service.


serait bien d'avoir la réponse réelle ici, plutôt que d'un lien car les forums sont actuellement en panne pour la maintenance ...


@Maxschilling: Vous avez raison - avoir juste un lien sans résumé, c'est une mauvaise pratique (j'ai appris depuis que j'ai posté cette réponse). Je vais le résoudre une fois que les forums sont en place.


Cette réponse est fausse ou mal formulée. [DataContract] et [sérialisable] ne peuvent pas être utilisés ensemble. Vous pouvez utiliser avec DatacontractSerializer, soit en appliquant les deux attributs ne fonctionnera pas.



0
votes

J'ai rencontré ce même problème avec la sérialisation pour le cadre d'entité Pocos sur la WCF. Rien ne fonctionnait et j'étais sur le point d'abandonner quand j'ai essayé de supprimer les étiquettes virtuelles des membres. Tout d'un coup, il a commencé à travailler. Donnez cela un essai.


0 commentaires

2
votes

Je sais que cela est très tard, mais au cas où quelqu'un le lit, nous avions un problème similaire. Notre solution pour quitter le Datacontract telle que la WCF Serialized Fine, puis lorsque nous soions sérialisés à la session SQL Server, nous avons sérialisé l'objet à JSON et l'a écrit à la session.


0 commentaires