Я запускаю пользовательское приложение, которое импортирует WSDL и генерирует исходный код C #, используя класс WSDLImporter для чтения в контрактах.
Типы последовательностей XSD переводятся в собственные массивы. Какие параметры я могу установить, чтобы иметь возможность создавать собственные типы коллекций?
Схема:
<xs:complexType name="getAllSourcesResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0"
name="return" type="tns:Source"/>
</xs:sequence>
</xs:complexType>
становится кодом:
public partial class getAllSourcesResponse
{
[System.Xml.Serialization.XmlElementAttribute("return",
Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public PaymentSource[] @return;
public getAllSourcesResponse()
{
}
public getAllSourcesResponse(Source[] @return)
{
this.@return = @return;
}
}
Я изучил код SvcUtil.exe, он, кажется, выполняет следующие действия, но, похоже, не имеет никакого значения, какой код генерирует мое приложение.
WsdlImporter importer = ...
XsdDataContractImporter contractImporter =
new XsdDataContractImporter(codeCompileUnit);
ImportOptions importOptions = new ImportOptions();
importOptions.ReferencedCollectionTypes.Add(
typeof(System.Collections.Generic.IList<>));
contractImporter.Options = importOptions;
importer.State.Add(typeof(XsdDataContractImporter), contractImporter);
@ CasperOne, этот фрагмент схемы
<xs:complexType name="getClassesForPackageResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
генерирует строку [] типа:
public partial class getClassesForPackageResponse
{
public string[] @return;
public getClassesForPackageResponse() {}
public getClassesForPackageResponse(string[] @return)
{ this.@return = @return; }
}
Это не заставляет коллекцию строк использовать List:
ImportOptions importOptions = new ImportOptions();
importOptions.ReferencedCollectionTypes.Add(
typeof(System.Collections.Generic.List<string>));