0

我看到一个非常奇怪的问题,即 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 中,当这个对象被反序列化时,调试器中的每个字段都为空。OrderAddress 类的实例不为空,只是所有字段。我 100% 确定我的 Web 服务代理层是最新的,并且 100% 肯定有数据通过网络传输,如Fiddler所示。

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

我有点记得以前看到过类似的东西,但不记得我是否成功修复它。

对我来说是凌晨 3 点 30 分,我需要推迟我的核心故障排除,但把它扔在这里,以防任何人阅读它。代码在一个模块中,我知道有时会导致一些奇怪 - 但这似乎很奇怪。

4

2 回答 2

1

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

于 2010-04-08T14:25:18.830 回答
0

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

于 2008-10-26T10:57:47.470 回答