2010-04-19 4 views
0

J'ai une classe qui est décorée avec un attribut KnownType avec un type de la classe. Est-ce que ce n'est pas autorisé?L'attribut DataContractSerializer KnownType n'est pas respecté?

[KnownType(typeof(Occ600UIConfig))] 
    public class Occ600UIConfig 
    { } 

Si oui, pourquoi le DCS rejette l'exception suivante?

{ "Erreur dans la position de la ligne 1 387. élément « http://schemas.microsoft.com/2003/10/Serialization/Arrays:Value » contient des données du contrat de données « http://schemas.datacontract.org/2004/07/OCC600.Infrastructure.Dictionary.BusinessEntities:Occ600UIConfig » . Désérialiseur n'a pas connaissance de tout type qui correspond à ce contrat. Ajouter le type correspondant à « Occ600UIConfig » pour la liste des types connus - par exemple, en utilisant l'attribut KnownTypeAttribute ou en l'ajoutant à la liste des types connus passé à D ataContractSerializer. "}

Répondre

4

L'attribut KnownType est utilisé pour définir et « publicité » classes descendant d'une classe de base qui pourrait également être utilisé dans un contexte donné.

Mais votre classe de données dans WCF devrait être principalement marquée avec un attribut [DataContract] (et tous les membres que vous souhaitez inclure un attribut [DataMember]):

[DataContract] 
public class Occ600UIConfig 
{ } 

Si vous n'avez pas des hiérarchies d'héritage, vous n'a jamais besoin de l'attribut KnownType.

Questions connexes