XSD 데이터 계약에서 일반 유형 매개 변수를 지정하는 방법은 무엇입니까?
-
12-12-2019 - |
문제
WebService 메서드 호출을위한 다음 요청 및 응답 데이터 계약 쌍이
<xs:element name="GetUserOptionsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="OptionType" type="entities:UserOption" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetUserOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Options" type="entities:UserOption" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
.
문제는 내가 갖고 싶은 것이 (의사 코드) 라고 말하는 방법입니다.
GetUserResponse response = GetuserOptions(new GetUserOptionsRequest(Type T))
.
및 응답에 내가 통과하는 유형에 따라 ILIST가 포함됩니다.
위의 데이터 계약 XSD를 사용하면 유형 정의를 지정하려는 경우 요청 객체의 클래스의 인스턴스를 예상하고 있습니다.
정말로 나는 그것을 원하는 것을 하고 싶습니다.
GetUserResponse<T> response = GetUserOptions(new GetUserOptionsRequest<T>());
.
그러나 XSD에서 일반 클래스 / 메소드를 지정하는 방법을 모르겠습니다.누구든지 좋은 기사에서 나를 지적하거나 xsd에서 이것을 정의 할 수있는 방법을 설명 할 수 있습니까?
코드 생성을 위해 WSCF 파란색을 사용하고 있습니다.
해결책
불행히도 xsd에서 열린 제네릭 을 사용하여 유형을 정의하는 것은 불가능합니다.
실제로 xsd는 일반 유형 인수를 전혀 나타내는 원본 방식이 없습니다. 그러나 XSD 스키마에서 .NET 유형 을 생성하려는 경우 mimic closed 일반적인 인수 <xsd:annotation>
<xsd:appinfo>
요소 :
.
<xs:element name="Foo">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
<xs:annotation>
<xs:appinfo>
<GenericType Name="FooOf{0}{#}"
Namespace="...">
<GenericParameter Name="string"
Namespace="http://www.w3.org/2001/XMLSchema" />
</GenericType>
</xs:appinfo>
</xs:annotation>
</xs:complexType>
</xs:element>
또한, GenericType
요소는 xsd 표준의 not 부분이며 .NET 코드 생성 도구로만 해석 될 것입니다.