Как создать пустые поля / переменные из WSDL вместо дополнительных полей / переменных - PullRequest
6 голосов
/ 28 сентября 2010

Я использую wsdl.exe для преобразования файла WSDL и файла Types.xsd в файл C #. В файле wsdl указываются необязательные переменные (minOccurs="0" maxOccurs="1"), и сгенерированный тип .NET обрабатывает это, создавая два поля - одно для переменной (например, status) и одно, чтобы сообщить, указано ли оно (statusSpecified).

Можно ли использовать инструмент wsdl для создания только одного поля Nullable (т. Е. Если оно не равно нулю, оно указано)? (Если это поможет, я думаю, что я могу изменить файл wsdl, чтобы иметь nillable="true" элементов.)

Есть ли другой, лучший инструмент, который будет генерировать .NET-типы из WSDL? Я использую .NET 4, поэтому было бы полезно, если бы сгенерированные типы пользовались такими функциями, как типы Nullable.

ПРИМЕЧАНИЕ. Я только что понял, что использую инструмент wsdl из .NET 2, и что более новые проекты должны использовать WCF для этого. Какие-нибудь указатели на способ WCF получить то, что я хочу?

Что касается WCF, эта статья указала мне в направлении использования инструмента svcutil (который уже был в моем PATH, поэтому я мог просто запустить его из командной строки в папке с wsdl и xsd файлы вроде так: svcutil *.wsdl *.xsd /language:C#). К сожалению, svcutil, похоже, не работает лучше с использованием типов Nullable вместо xSpecified переменных.

1 Ответ

0 голосов
/ 19 декабря 2018

нет, если вы не измените свою схему xsd. Прочтите эту статью о xsd

Если у вас есть элемент с minOccurs="0" и nillable="true", он все равно сгенерирует поле xSpecified.

private System.Nullable<bool> x;

private bool xSpecified;

Если вы хотите, чтобы полебыть обнуляемым, тогда элемент в xsd должен minOccurs="1" и nillable="true".

private System.Nullable<bool> x;

Разница между обнуляемым и указанным:

  • если поле обнуляется, то поле будет сериализовано дажеесли это нуль: <minzero xsi:nil="true"><minzero>
  • , если указанное поле является ложным.тогда поле не будет сериализовано.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...