2010-05-27 62 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; 
}