2008-10-26 70 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