2013-07-10 1 views
2

J'ai le DataContract suivant: Remarque: je n'ai pas l'autorisation de modifier le contrat de données. Je ne fais référence qu'à cela.Erreur lors de la désérialisation d'enum sur C# datacontract

[Serializable] 
[DataContract] 
public class Client 
{ 
    public Client(); 
[DataMember] 
public string Name { get; set; } 
[DataMember] 
public List<Contact> Contacts { get; set; } 
} 

Et dans le Contact:

[Serializable] 
[DataContract] 
public class Contact 
{ 
     public Contact(); 
[DataMember] 
public string ContactName { get; set; } 
[DataMember] 
public ContactTypes ContactType { get; set; } 
} 

Le ContactTypes est un ENUM:

[Serializable] 
[DataContract] 
public enum ContactTypes 
{ 
    [EnumMember(Value="Phone")] 
    Phone = 1, 

    [EnumMember(Value="Mail")] 
    Mail = 2 
} 

Mon problème est quand je suis désérialisation mon xml. Il montre une erreur: La valeur enum invalide "1" ne peut pas être désérialisée.

Voici mon xml:

<Clients> 
<Client> 
     <Name>Firstname</Name> 
     <Contacts> 
      <Contact> 
       <ContactName>ContactName</ContactName> 
       <ContactType>1</ContactType> 
      </Contact> 
     </Contacts> 
</Client> 
</Clients> 

Ai-je raté quelque chose? J'ai été stock sur ce problème toute la journée maintenant. Merci pour l'aide!

Répondre

2

Par défaut, le contrat de données inclut des noms de membres d'énumération, et non des valeurs numériques. Lorsque vous utilisez le modèle de contrat de données, si le côté de réception est un client WCF, le schéma exporté conserve la valeur numérique.

Cela ne moyen facile de résoudre pour changer la DataContract de cette façon

[Serializable] 
[DataContract] 
public enum ContactTypes 
{ 
    [EnumMember(Value="1")] 
    Phone = 1, 

    [EnumMember(Value="2")] 
    Mail = 2 
} 

Maintenant, si vous ne pouvez pas modifier le DataContract, vous pouvez avoir un gros problème ...

Je suppose que le côté envoi n'utilise pas WCF (pourquoi verrouiller le contrat de données? Pourquoi une mauvaise définition?), Et il est vraiment important d'utiliser le bon modèle de contrat de données: il n'est pas adapté au fichier xml.

+0

La vérité est que je peux éditer le contrat de données mais seulement sur ma fin locale. Je suppose que je vais donner un coup de feu. – Gerald

Questions connexes