SOAP对象的LINQ to SQL序列化问题

时间:2010-05-27 21:06:26

标签: .net sql linq serialization soap

好的,所以这是我见过的.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”变量内容。

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

提前致谢。

1 个答案:

答案 0 :(得分: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;
}