2010-01-12 6 views
1

Mon objet "Location" n'est pas sérialisé dans mon contrat de données WCF, cependant, toutes les autres variables sont définies correctement. Lorsque je tente de produire une variable dans l'objet de l'emplacement que je reçois l'erreur « référence d'objet non définie à une instance d'un objet »Problème de désérialisation WCF

Mon DataContract:

[DataContract(Namespace = "")] 
public class CalcRequest : BaseRequest 
{ 
    [DataMember(Name = "Products")] 
    public List<Product> products; 

    [DataMember(Name = "Location")] 
    public Location location; 

    [DataMember(Name = "ShippingMethod")] 
    public string shippingMethod; 

    [DataMember(Name = "SystemPromotionCode")] 
    public string systemPromotionCode; 

    [DataMember(Name = "UserPromotionCode")] 
    public string userPromotionCode; 
} 

L'objet « Localisation »:

[DataContract(Name = "Location", Namespace = "")] 
public class Location 
{ 
    public Location() 
    { 
     // do nothing 
    } 

    [DataMember(Name = "Country")] 
    public string country; 

    [DataMember(Name = "StateProvince")] 
    public string stateProvince; 

    [DataMember(Name = "PostalCode")] 
    public string postalCode; 
} 

ma demande de XML (version, msgtype, processorID et customerid sont dans mon "BaseRequest"):

<root> 
    <Version>1.0</Version> 
    <MsgType>type</MsgType> 
    <ProcessorId>28000</ProcessorId> 
    <CustomerId>28000</CustomerId> 
    <Products> 
     <Product> 
      <SKU>1</SKU> 
      <Price>2999</Price> 
      <ProductName>name1</ProductName> 
      <Quantity>1</Quantity> 
     </Product> 
     <Product> 
      <SKU>2</SKU> 
      <Price>1999</Price> 
      <ProductName>name2</ProductName> 
      <Quantity>1</Quantity> 
     </Product> 
    </Products> 
    <Location> 
     <Country>US</Country> 
     <StateProvince>OH</StateProvince> 
     <PostalCode>44060</PostalCode> 
    </Location> 
    <ShippingMethod>USPS-NextDay</ShippingMethod> 
    <SystemPromotionCode>CD1244578</SystemPromotionCode> 
    <UserPromotionCode>2FDGRR</UserPromotionCode> 
</root> 

... Je ne sais pas pourquoi cela ne fonctionne pas ... toute aide serait appréciée.

+0

À quoi ressemble le reste de votre demande XML? –

+0

Mis à jour ma question avec la pleine demande –

Répondre

3

Je ne comprends pas ce que vous pensez manque, vraiment ....

(substance supprimé - non pertinent)

MISE À JOUR: pour vous assurer que l'ordre des éléments du XML est correcte et interprété dans le bon ordre, vous voudrez peut-être ajouter la déclaration Order=xxx au membre de données attributes-

Sinon, le sérialiseur contrat de données sérialise (et deserialize) dans l'ordre alphabétique (autre que le XmlSe rializer qui sérialise dans l'ordre les champs apparaissent).

L'ordre alphabétique est sensible à la casse, c'est-à-dire. tous les caractères majuscules sont considérés avant les caractères minuscules.

Si vous avez plusieurs éléments du même ordre (ce n'est pas un problème), ils seront classés par ordre alphabétique dans leur ordre (par exemple, tous les éléments de Order = 1 seront numérotés par ordre alphabétique). Ordre = 2 et ainsi de suite).

Pour les classes dérivées, les propriétés de la classe de base seront sérialisées d'abord (par ordre alphabétique) et les propriétés de la classe dérivée plus tard (également par ordre alphabétique).

+0

Je suppose que j'espérais que quelqu'un pourrait repérer un problème flagrant. Lorsque j'essaie de Debug.WriteLine (request.location.country); il indique la "référence d'objet non définie à une instance d'un objet" –

+0

Ainsi quand vous regardez les objets dans cette fonction WriteLine, tandis qu'en mode debug, lequel est null? –

+0

@marc_s Oui, le processus de conversion de mon xml en un objet semble être le problème ... mais juste pour l'objet Location, puisque je peux accéder à tous les autres objets –

Questions connexes