2010-05-27 61 views
0

好的,所以这是我见过的.net编程中最奇怪的问题。似乎对象字段按照字段初始化顺序在.net Web服务中序列化。LINQ to SQL序列化问题与SOAP对象

这一切都始于Flex,不接受来自.net Web服务的SOAP响应。我发现这是由于序列化字段的顺序是声明可序列化类中字段的顺序。

它与泛型列表和LINQ to SQL有关,但我找不到。这一个真的很难重现。

例获得的想法:

[Serializable] 
public class SomeSample 
{ 
    public int A; 
    public int B; 
    public int C; 
} 

我使用LINQ和返回SomeSample对象列表查询ASMX Web服务中的一些数据表:

var r = (from ...... select new SomeSample { A = 1, C = 3 }).ToList(); 

现在的名单是一次迭代和B字段被应用一些值(例如2)。

但是返回的SOAP信封包含以下摘录:

<A>1</A><C>3</C><B>2</B> 

请注意序列化的顺序。如果我最初初始化所有字段:

var r = (from ...... select new SomeSample { A = 1, B = 2, C = 3 }).ToList(); 

对象按正确顺序序列化。

我必须补充说,在这两种情况下,调试器都显示完全相同的“r”变量内容。

我是失去理智还是这种正常行为?

在此先感谢。

回答

0

这很奇怪,但实际上这是正常行为。幸运的是,有一个属性可以解决它。您可以使用DataMember(Order = x)属性设置要序列化的属性的顺序:http://msdn.microsoft.com/en-us/library/ms729813.aspx

[Serializable] 
[DataContract] 
public class SomeSample 
{ 
    [DataMember(Order = 0)] 
    public int A; 
    [DataMember(Order = 1)] 
    public int B; 
    [DataMember(Order = 2)] 
    public int C; 
}