2

Dans .NET 3.5, je voudrais créer un attribut personnalisé (disons [NetDataMember]) qui permuterait le comportement de sérialisation de DataContractSerializer à NetDataContractSerializer.Attribut personnalisé pour passer la sérialisation de propriété à NetDataContractSerializer

En fait, pour une classe A comme illustré ci-dessous

[DataContract] 
class A 
{ 
    [DataMember] 
    public int SimpleProperty { get; set; } 

    [Transcient] 
    public IBar ComplexProperty { get; set; } 
} 

Je voudrais obtenir un sérialiseur qui se comporterait comme DataContractSerializer par défaut, mais qui serait outrepassée avec NetDataContractSerializer biens immobiliers marqués par [NetDataMember].

Une idée de comment concevoir un sérialiseur qui permettrait d'atteindre un tel comportement?

Répondre

6

Il n'y a pas de solution «prête à l'emploi» dans WCF pour cela, mais beaucoup de gens très intelligents ont déjà abordé ce problème.

Découvrez blog post on the NetDataContractSerializer Aaron Skonnard dans lequel il présente un comportement que vous pouvez mettre sur vos contrats de données comme un attribut:

[NetDataContractFormat] 

sur votre interface de service (pour toutes les méthodes) ou sur une seule méthode utilisera la NetDataContractSerializer pour cet appel. Vous devez définir ceci par opération ou service - pas sur vos contrats de données.

+0

Merci pour le lien. En fait, je n'arrive pas à produire l'effet de priorité. J'applique l'attribut, mais le comportement de substitution n'est jamais appelé au moment de (dé) sérialisation. Suis-je en manque lors de l'instanciation du DCS? –

+0

Lors de la désérialisation, dans WCF, aucun constructeur n'est jamais appelé - c'est un comportement normal. –

+0

Mais pour voir si le NetDataContractSerializer est utilisé, vous devriez regarder les messages envoyés - soit utiliser le WcfTestClient.exe dans votre répertoire Visual Studio Common7/IDE, ou utiliser quelque chose comme Fiddler pour voir le trafic –

Questions connexes