2012-04-23 2 views
0

사용자 지정 언어에서 WCF 서비스를 생성하는 타사 프레임 워크를 사용하고 있습니다. 그러나 컬렉션 클래스를 사용하는 경우,이 생성 된 출력이다WCF의 네이티브 컬렉션 이름 지정

namespace MyNameSpace 
{ 
    using System; 
    using System.ServiceModel; 

    [MessageContract] 
    public class FindSomethingResponse 
    { 
     [MessageBodyMember(Order=1)] 
     public System.Collections.Generic.List<SomethingDC> response; 
    } 
} 

이 좋지만, 상기 서비스를 소비 할 때 약간의 바람직하지 않은 결과를 야기한다. 이것은 위가 생성하는 XSD입니다 :

<FindSomethingResponse> 
    <ArrayOfSomethingDC> 
     <SomethingDC/> 
     <SomethingDC/> 
     <SomethingDC/> 
     ... 
    </ArrayOfSomethingDC> 
</FindSomethingResponse 

"그룹 노드가"ArrayOfSomethingDC라고하지만 오히려 더 의미있는라는 것 (예 : "일도".).

내가 지금까지 발견 한 바로는 노드 이름을 지정하기 위해 CollectionDataContract 특성을 사용해야한다는 것입니다. 그러나, 나는 실제로 생성 된 클래스의 구조를 변경할 수는 없지만 (위의 방법은 제 3 자 프레임 워크에서 수행했기 때문에), 위의 메소드 만 편집 할 수 있습니다.

어떤 방식 으로든 가능합니까?

+0

아래로 시도? – Jodrell

+0

'IEnumerable '을 반환 해 보았습니까? 확실히 더 정확한 이름은'SomethingDCs'입니다. – Jodrell

답변

0

는 방법 위의 무엇을 편집 할 수 있습니다

namespace MyNameSpace 
    { 
     using System; 
     using System.ServiceModel; 

     [CollectionDataContract(Name = "Somethings", ItemName = "SomethingDC")] 
     public class CustomList<T> : List<T> 
     { 
      public CustomList() 
       : base() 
      { 
      } 

      public CustomList(T[] items) 
       : base() 
      { 
       foreach (T item in items) 
       { 
        Add(item); 
       } 
      } 
     } 


     [MessageContract] 
     public class FindSomethingResponse 
     { 
      [MessageBodyMember(Order = 1)] 
      public CustomList<SomethingDC> response; 
     } 
    }