2010-01-12 175 views
1

我的「Location」對象在我的WCF數據合同中沒有被序列化,但是,所有其他變量都被正確設置。當我嘗試輸出變量的位置對象,我得到了「對象引用不設置到對象的實例」錯誤WCF反序列化問題

我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; 
} 

「位置」對象:

[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; 
} 

我的XML請求(版本,信息類型,processorID和客戶ID是在我的 「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> 

...不知道爲什麼這不工作...任何幫助將不勝感激。

+0

您的XML請求的其餘部分是什麼樣的? – 2010-01-12 16:08:54

+0

更新我的問題與完整的請求 – 2010-01-12 16:14:58

回答

3

我不明白你在想什麼缺失,真的....

(東東刪除 - 不相關)

UPDATE:,以確保在XML元素的順序是正確的,正確的順序解釋,你可能想Order=xxx聲明按字母順序(比XmlSe其他添加到數據成員屬性 -

否則,數據合同串行器將序列(和反序列化)rializer按序出現字段序列化)。

字母順序是區分大小寫的,在任何小寫字符之前考慮任何大寫字母。

如果您有多個相同順序的元素(這不是問題),那麼它們將按照它們的順序按字母順序排列(例如Order = 1的所有元素都將按照字母順序排列 - 然後所有元素訂單= 2等)。

對於派生類,基類的屬性將先後(按字母順序)和派生類的屬性(也按字母順序排列)序列化。

+0

我想我希望有人能夠發現一個公然的問題。當我嘗試Debug.WriteLine(request.location.country);它表示「對象引用未設置爲對象的實例」 – 2010-01-12 16:31:07

+0

因此,當您查看WriteLine函數中的對象時,處於調試模式時,哪一個爲空? – 2010-01-12 16:32:39

+0

@marc_s是的,將我的xml轉換爲對象的過程似乎是問題......但僅適用於Location對象,因爲我可以訪問所有其他對象 – 2010-01-12 16:39:19