2008-10-26 51 views
0

我看到一個由Flex使用的.NET webservice的一個非常奇怪的問題。Flex無法反序列化僅包含屬性的webservice元素

我有一個非常簡單的類,只有屬性[XmlAttribute('xxx')]屬性。

public class OrderAddress 
{ 
    public OrderAddress() {} 

    [XmlAttribute("firstName")] 
    public string FirstName { get; set; } 

    [XmlAttribute("lastName")] 
    public string LastName { get; set; } 

    [XmlAttribute("company")] 
    public string Company { get; set; }   

    [XmlAttribute("address1")] 
    public string Address1 { get; set; } 

    ... (more properties) 
} 

問題是,在Flex中,當此對象反序列化時,每個SINGLE字段在調試器中都爲空。 OrderAddress類的實例不是null,只是所有字段。我100%確定我的Web服務代理層是最新的,並且有100%的絕對數據通過線路,如Fiddler所示。

非常非常奇怪的是,如果我將這些屬性之一更改爲序列化爲一個元素(而不是XmlAttribute)並僅重新編譯我的C#web服務,那麼Flex可以立即識別數據。如果我添加一個完全未使用的字段 - 如public string Foo = "foo";那麼這也突然起作用。

我記得以前看過類似的東西,但不記得如果我成功修復它。

它對我來說是凌晨3點30分,我需要推遲我的硬核故障排除,但是如果它對任何人閱讀都很明顯,就把它扔到這裏。代碼位於一個模塊中,我知道它有時會導致一些奇怪 - 但這似乎是非常奇怪的。

回答

1

經過三天的努力,終於找到了這個XML屬性是我的問題的原因。除了XML屬性之外,我的類還有一個對象數組。 Flex能夠生成代理,甚至可以正確地獲得屬性(它被當作一個屬性),但是它無法將XML元素(從web serive返回)反序列化爲對象數組。一旦我刪除該屬性,一切工作正常...所以是的,這是「以元素爲中心的XML序列化」。但是,有什麼方法可以解決它嗎?

+0

不知道你的情況是否與我的情況相同 - 但你是否嘗試切換到WCF而不是ASMX – 2010-04-09 04:53:26

0

元素中心XML是XML序列化中更具互操作性的格式。 這就是新的WCF DataContract序列化器將每個屬性作爲元素而不是屬性進行序列化的原因。屬性給我的是元素的描述符,而不是元素的數據。

+0

對!這正是我使用屬性的原因。地址字段是地址的屬性,決不需要任何分層結構。屬性工作得很好,但爲什麼沒有任何元素有所作爲我仍然不知道 – 2008-10-27 07:35:34