2010-05-27 2 views
0

좋아, 내가 본 것 중 가장 이상한 .net 프로그래밍 문제입니다. 객체 필드는 .net 웹 서비스에서 필드 초기화 순서대로 직렬화 된 것처럼 보입니다.SOAP 개체에 대한 LINQ to SQL 직렬화 문제

모두 Flex에서 시작하여 .net 웹 서비스의 SOAP 응답을 허용하지 않습니다. 직렬화 된 필드의 순서가 선언 된 직렬화 가능 클래스의 필드 순서를 통계 화하는 것이 원인이라는 것을 알게되었습니다.

일반 목록 및 LINQ to SQL과 관련이 있지만 무엇을 찾을 수 없습니다. 이것은 재현하기가 정말로 어렵습니다. 목록하며 한번 더 반복했다 이제

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

: 내가 LINQ를 사용하고 SomeSample 객체의리스트를 돌려 ASMX 웹 서비스 내에서 일부 데이터 테이블을 질의했다

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

:

예는 아이디어를 얻을 수 있습니다 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

이것은 이상하지만 실제로는 정상적인 동작입니다. 다행히도이 문제를 해결할 수있는 속성이 있습니다. 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; 
}