C# 如何在XSD数据协定中指定泛型类型参数?

C# 如何在XSD数据协定中指定泛型类型参数?,c#,wcf,xsd,datacontracts,wscf,C#,Wcf,Xsd,Datacontracts,Wscf,对于Webservice方法调用,我有以下请求和响应数据契约对 <xs:element name="GetUserOptionsRequest"> <xs:complexType> <xs:sequence> <xs:element name="OptionType" type="entities:UserOption" /> </xs:sequence> </xs:co

对于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>
并且让响应包含一个IList,这取决于我通过的类型

在我上面的数据契约XSD中,当我只想指定一个类型定义时,它希望请求对象中有一个类的实例

真的吗?我想我想要什么

GetUserResponse<T> response = GetUserOptions(new GetUserOptionsRequest<T>());
GetUserResponse-response=GetUserOptions(新的GetUserOptions请求());
但是我不知道如何在XSD中指定泛型类/方法。有人能给我指出一篇好文章,或者解释一下我如何在XSD中定义它吗


我也在使用WSCF blue生成代码。

不幸的是,在XSD中使用开放泛型定义类型是不可能的

实际上,XSD根本没有表示泛型类型参数的本机方法。但是,如果要从XSD架构生成.NET类型,可以通过使用包含元素的


...
此XSD架构将在.NET类型系统中表示为类型为
Foo
的类。请注意,在本例中,泛型参数指定为
string
,但没有任何东西阻止您在具有不同泛型参数的多个协定中重用相同的XSD元素定义


另外,请注意,
GenericType
元素不是XSD标准的一部分,只能由.NET代码生成工具进行解释。

Ok谢谢。顺便问一下,是否可以在XSD中指定您的类是另一个基类型的子类?例如,如果我有一个定义了Id和描述字段的UserChoice对象,那么我是否可以在XSD类型中声明,例如TravelChoice、SportChoice、FamilyChoice,这些类型都继承自UserChoice,并且不会添加比基本对象更多的行为?@JohnSaunders我更新了我的答案。感谢您指出这一点。@user1122909是的,您可以使用
元素表示继承。查看此问题了解更多详细信息:
GetUserResponse<T> response = GetUserOptions(new GetUserOptionsRequest<T>());
<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>