2012-07-20 3 views
1

이 간단한 질문 인 경우 사과드립니다. "범용"C# 웹 서비스 클라이언트를 작성했습니다. 웹 서비스의 WSDL을 검사하고 웹 서비스에 요청을 제출하고 응답을 표시 할 수있는 Windows Forms UI를 생성하여 작동합니다.C# 클래스를 ArrayOf 인스턴스로 인식하는 방법

다음과 같이 UI를 생성합니다. 먼저 웹 서비스의 WSDL에서 ServiceDescriptionImporter 및 CodeCompiler를 사용하여 컴파일 된 어셈블리를 동적으로 생성 한 다음이 프로세스에서 생성 한 SoapHttpClientProtocol 클라이언트를 인트로 스펙 트합니다.

각 웹 서비스 메서드에 대해 입력 매개 변수 필드를 표시 할 UI는 매개 변수 유형을 반영하여 생성됩니다. 본질적으로 각 유형을 인식하고이를 표시하는 방법을 결정해야합니다 (따라서 String 매개 변수는 텍스트 상자, 확인란은 부울로 표시됨).

인식하기 어려운 유형은 ArrayOfKeyValuestringstringKeyValueOfstringstring과 같은 유형입니다. if (이름이 "ArrayOf"로 시작하는 if()의 행을 따라) 유형의 이름을 간단히 구문 분석 할 수는 있지만 이러한 유형을 어떤 방식 으로든 배열로 인식하는 더 좋은 방법이 있어야합니다.

누구나이 방법을 제안 할 수 있다면 가장 감사하게 생각합니다. 감사합니다, 마틴

+0

샘플 콘텐츠를 제공 할 수 있습니까? SOAP XML 또는 문제를 설명하는 코드 부분. XML이 명시 적으로 배열을 식별한다는 것을 나타내는 것으로 보이는 SOAP 문서를 찾았습니다. http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383522 –

+0

문자 그대로 "ArrayOfKeyValuestringstringKeyValueOfstringstring"이라고 불리우는가? 아니면 실제로 배열입니까? 즉, 객체가 실제로 배열인지 알고 싶습니까? –

+0

안녕하세요 - 그렇습니다. 문자 그대로 그 유형이라고합니다. 웹 서비스 측면에서 형식은 Dictionary 로 선언되지만 내 도구가 웹 서비스를 호출하면 반환 된 개체는 ArrayOfKeyValueStringStringStringValueOfstringstring 형식으로 식별됩니다. type.IsArray를 테스트하면 false입니다. 그러나 제 목적을 위해이 코드를 배열과 비슷한 것으로 취급하고 싶습니다. 따라서 "배열과 같은"것으로 식별해야합니다. – user304582

답변

1

가 배열 또는 목록의 모든 유형이 있다면, 그것은 IEnumerable을 구현하는 것입니다, 그래서 이것은 올바른 방향으로 당신을 얻을 수 있습니다

if (typeof(IEnumerable).IsAssignableFrom(typeof(ArrayOfKeyValuestringstringKeyValueOfstringstring))) 
{ 
    // ok, it's an array... 
} 

편집 : 마틴 (user304582)가 다른 지적 String과 같은 유형은 IEnumerable을 구현합니다. 여기서 가정 할 때, 코드의이 시점에서 간단한 유형 (예 : String, Int32 등)이 이미 테스트되었습니다.이 중 하나가 아닙니다.

ServiceDescriptionImporter가 모든 경우에 목록이 아닌 매개 변수를 사용하여 매개 변수를 생성한다고 가정하면 IEnumerable 대신 Array을 사용할 수도 있습니다.

0

프로그래밍 방식으로 키와 값 유형을 추출해야하기 때문에이 기능이 작동하지 않습니다. 다른 기술적 인 이유 때문에 .NET 4.0 WsdlImporter 및 관련 클래스를 사용하도록 클라이언트를 업그레이드했으며보다 명확하게 형식화 된 코드를 생성합니다. 그리고 부산물은 이러한 ArrayOf 클래스의 사용을 피합니다. 당신의 도움을 주셔서 감사합니다!

관련 문제