Flex无法反序列化仅包含属性的webservice元素

时间:2008-10-26 10:27:28

标签: flex web-services actionscript serialization

我看到一个非常奇怪的问题,即Flex使用.NET Web服务。

我有一个非常简单的类,只有[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字段都为null。 OrderAddress类的实例不是null,只是所有字段。我100%确定我的网络服务代理层是最新的,并且有{100}肯定数据通过网络传输,如Fiddler所示。

非常奇怪的是,如果我将其中一个属性更改为序列化为元素(而不是XmlAttribute)并仅重新编译我的C#webservice,则Flex可以立即识别数据。如果我添加一个完全未使用的字段 - 比如public string Foo = "foo";,那么它也会突然发挥作用。

我有点记得以前看过这样的事情,但如果我成功修复它,就不要记得。

凌晨3:30对我来说,我需要推迟我的核心故障排除,但是如果对任何读者都很明显,请将其丢弃。代码在一个模块中,我知道它有时会引起一些奇怪 - 但这似乎非常奇怪。

2 个答案:

答案 0 :(得分:1)

经过三天的挣扎,最后我发现这个XML属性是我问题的原因。与您的略有不同,除了XML属性之外,我的类还有一个对象数组。 Flex能够生成代理,甚至正确获取属性(它被视为属性),但它无法将XML元素(从Web服务器返回)反序列化为对象数组。一旦我删除了该属性,一切正常......所以是的,这是“以元素为中心的XML序列化”。但是,有什么方法可以解决它吗?

答案 1 :(得分:0)

以元素为中心的XML是XML序列化中更具互操作性的格式。 这就是新WCF DataContract序列化程序将每个属性序列化为元素而不是属性的原因。我的属性是元素的描述符,而不是元素的数据。