Pourquoi ne puis-je pas utiliser WCF DataContract et ISerializable sur la même classe?
J'ai une classe que j'ai besoin d'être en mesure de sérialiser un SQLServer variable de session et être disponible sur un Service WCF. J'ai déclaré comme suit
namespace MyNM
{
[Serializable]
[DataContract(Name = "Foo", Namespace = "http://www.mydomain.co.uk")]
public class Foo : IEntity, ISafeCopy<Foo>
{
[DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual string a { get; set; }
DataMember(Order = 2)]
public virtual Bar c { get; set; }
/* ISafeCopy implementation */
}
[Serializable]
[DataContract(Name = "Bar ", Namespace = "http://www.mydomain.co.uk")]
public class Bar : IEntity, ISafeCopy<Bar>
{
#region Implementation of IEntity
DataMember(Order = 0)]
public virtual Guid Id { get; set; }
[DataMember(Order = 1)]
public virtual Baz y { get; set; }
#endregion
/* ISafeCopy implementation*/
}
[Serializable]
[DataContract]
public enum Baz
{
[EnumMember(Value = "one")]
one,
[EnumMember(Value = "two")]
two,
[EnumMember(Value = "three")]
three
}
Mais quand j'essaie de l'appeler ce service, j'obtiens l'erreur suivante dans le journal de suivi.
"Du système.Moment de l'exécution.La sérialisation.InvalidDataContractException:
Type
'BarProxybcb100e8617f40ceaa832fe4bb94533c'
ne peut pas être ISerializable et ont
DataContractAttribute attribut."
Si je sors de l'attribut Serializable, le service WCF fonctionne, mais lorsque l'objet ne peut pas être sérialisé à la session. Si je supprime le DataContract attribut de la classe Bar, le service WCF ne parvient pas dire
Type
'BarProxy3bb05a31167f4ba492909ec941a54533'
avec des données nom du contrat
'BarProxy3bb05a31167f4ba492909ec941a54533:http://schemas.datacontract.org/2004/07/'
n'est pas prévu. Ajouter tous types pas
connu statiquement à la liste des
types - par exemple, en utilisant le
KnownTypeAttribute attribut ou par
en les ajoutant à la liste des types connus
passé à DataContractSerializer
J'ai essayé d'ajouter un KnownType attribut de la classe foo
[KnownType(typeof(Bar))]
Mais j'obtiens toujours la même erreur.
Quelqu'un peut m'aider avec ça?
Merci beaucoup
Dave
source d'informationauteur Dave
Vous devez vous connecter pour publier un commentaire.
Cette question sur MSDN qui pourraient vous aider: DataContract contre Serializable.
La accepté de répondre à partir de ce thread:
Je sais que c'est très tard, mais au cas où quelqu'un lit ceci, nous avons eu un problème similaire. Notre solution de quitter le DataContract comme WCF sérialisé bien, et puis quand nous sérialisé à la session SQL Server, nous sérialisé l'objet en JSON et qui écrit à la session.
J'ai rencontré ce même problème avec la sérialisation de l'entité cadre pocos à travers la wcf. Rien ne fonctionnait et j'ai été sur le point d'abandonner quand j'ai essayé de supprimer les balises virtuelles de la part des membres. Tout d'un coup il a commencé à travailler. Donner que d'essayer.