好的,所以这是我见过的.net编程中最奇怪的问题。似乎对象字段按字段初始化顺序在.net Web服务中序列化。
这一切都始于Flex不接受来自.net Web服务的SOAP响应。我发现这是由于序列化字段的顺序是满足声明的可序列化类中字段的顺序。
它与通用列表和LINQ to SQL有关,但我找不到什么。这个很难复制。
获得想法的示例:
[Serializable]
public class SomeSample
{
public int A;
public int B;
public int C;
}
我使用linq查询asmx web服务中的一些数据表并返回SomeSample对象列表:
var r = (from ...... select new SomeSample { A = 1, C = 3 }).ToList();
现在列表再次被迭代,B字段被应用了一些值(例如2)。
然而,返回的肥皂信封包含以下摘录:
<A>1</A><C>3</C><B>2</B>
请注意序列化的顺序。如果我最初初始化所有字段:
var r = (from ...... select new SomeSample { A = 1, B = 2, C = 3 }).ToList();
对象按正确顺序序列化。
我必须补充一点,在这两种情况下,调试器都显示完全相同的“r”变量内容。
我是在失去理智还是这种正常行为?
提前致谢。
答案 0 :(得分:1)
我认为你不应该依赖序列化顺序。实际上,正确的反序列化无关紧要。
答案 1 :(得分:1)
是的。 :-(至少对于Flex SDK 3.6.0.x中的SOAP反序列化器的元素。
答案 2 :(得分:1)
我在上一篇文章中的意思是 - 无论SOAP / WSDL规范是否正常 - Flex SDK都希望
<sequence>
按照WSDL中的定义按顺序提供子元素。