2009-10-19 5 views
2

J'ai une application de test simple qui tire un document XML à partir d'une interface de repos. L'élément de données contient deux champs de chaîne et quelques champs booléens. I crée une classe d'entité simple et y ajoute un attribut DataContractAttribute, puis ajoute DataMemberAttributes à chaque membre de données. J'utilise ensuite HttpResponseMessage.Content.ReadAsDataContract() pour analyser la réponse. Tous les types de chaînes arrivent très bien mais tous mes types booléens sont faux (et ils ne sont pas vraiment faux). L'élément XML est quelque chose comme:Comment puis-je obtenir un DataMemberAttribute utiliser un type booléen

<is-enabled type="boolean">true</is-enabled> 

puis dans ma classe de type j'ai quelque chose comme:

[DataMember(Name="is-enabled")] 
public bool isEnabled 
{ 
    get 
    { 
     return this.isEnabledField; 
    } 
    set 
    { 
     this.isEnabledField = value; 
    } 
    } 

Comment puis-je obtenir les valeurs booléennes à venir à travers correctement?

Répondre

0

Il semble que cela devrait fonctionner mais ... la première chose que j'essayerais est de supprimer le tiret "-" du nom du membre de données. Il est possible que le (de) sérialiseur s'étouffe sur le tableau de bord en interne et ne soit pas mappé au membre correct et vous donne par conséquent la valeur bool par défaut de false;

Si vous ressentez le besoin de rendre le nom de variable composé plus lisible, essayez un trait de soulignement.

+0

Je ne peux pas le changer, c'est le nom du membre du service que je consomme. – MikeD

1

Croyez-le ou non, DataContractSerializer est sensible à l'ordre des éléments dans le document XML désérialisé. Je parie que vous devez définir la propriété Order de DataMemberAttribute pour correspondre à la position réelle de "is-enabled" parmi les autres enfants de son élément parent.

Questions connexes