我看到一个非常奇怪的问题,即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对我来说,我需要推迟我的核心故障排除,但是如果对任何读者都很明显,请将其丢弃。代码在一个模块中,我知道它有时会引起一些奇怪 - 但这似乎非常奇怪。
答案 0 :(得分:1)
经过三天的挣扎,最后我发现这个XML属性是我问题的原因。与您的略有不同,除了XML属性之外,我的类还有一个对象数组。 Flex能够生成代理,甚至正确获取属性(它被视为属性),但它无法将XML元素(从Web服务器返回)反序列化为对象数组。一旦我删除了该属性,一切正常......所以是的,这是“以元素为中心的XML序列化”。但是,有什么方法可以解决它吗?
答案 1 :(得分:0)
以元素为中心的XML是XML序列化中更具互操作性的格式。 这就是新WCF DataContract序列化程序将每个属性序列化为元素而不是属性的原因。我的属性是元素的描述符,而不是元素的数据。