.net SOAP对象的LINQ到SQL序列化问题
这是我见过的.net编程中最奇怪的问题。在.net web服务中,对象字段似乎是按照字段初始化的顺序序列化的 这一切都始于Flex不接受来自.NETWeb服务的SOAP响应。我发现这是由于序列化字段的顺序在声明的可序列化类中按字段的顺序进行统计 它与泛型列表和LINQ to SQL有关,但我不知道是什么。这个真的很难复制 获得该想法的示例:.net SOAP对象的LINQ到SQL序列化问题,.net,sql,linq,serialization,soap,.net,Sql,Linq,Serialization,Soap,这是我见过的.net编程中最奇怪的问题。在.net web服务中,对象字段似乎是按照字段初始化的顺序序列化的 这一切都始于Flex不接受来自.NETWeb服务的SOAP响应。我发现这是由于序列化字段的顺序在声明的可序列化类中按字段的顺序进行统计 它与泛型列表和LINQ to SQL有关,但我不知道是什么。这个真的很难复制 获得该想法的示例: [Serializable] public class SomeSample { public int A; public int B;
[Serializable]
public class SomeSample
{
public int A;
public int B;
public int C;
}
我正在使用linq查询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>
对象已按正确顺序序列化
我必须补充一点,在这两种情况下,调试器显示的“r”变量的内容完全相同
我是疯了还是这是正常的行为
提前谢谢。这很奇怪,但实际上这是正常的行为。幸运的是,有一个属性可以解决这个问题。您可以使用
DataMember(order=x)
属性设置要序列化的属性的顺序:
var r = (from ...... select new SomeSample { A = 1, B = 2, C = 3 }).ToList();
[Serializable]
[DataContract]
public class SomeSample
{
[DataMember(Order = 0)]
public int A;
[DataMember(Order = 1)]
public int B;
[DataMember(Order = 2)]
public int C;
}