К проекту подключен внешний Service Reference. Сгенерированный код в Reference.cs содержит свойства int и DateTime, помеченные как Nullable. Например:
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
public System.Nullable<int> idType {
get {
return this.idTypeField;
}
set {
this.idTypeField = value;
this.RaisePropertyChanged("idType");
}
}
Проблема в том, что после сериализации эти свойства отсутствуют в теле XML-запроса. Пример кода с отправкой запроса:
using (SingleFormatServiceClient c = new SingleFormatServiceClient())
{
AuthData auth = new AuthData()
{
login = "login",
password = "pass"
};
GroupRequestData requestData = new GroupRequestData();
ConnectorCode connectorCode = new ConnectorCode()
{
connectorCode = "0",
subRequestCode = new[] { "1" }
};
PersonRequestData personRequestData = new PersonRequestData();
personRequestData.idNum = "757496";
personRequestData.idSeries = "9823";
personRequestData.idType = 21;
personRequestData.consentEndDate = DateTime.ParseExact("05.08.2020", "dd.MM.yyyy", CultureInfo.CurrentCulture);
personRequestData.issueLocation = "МОСКВА";
requestData.personParam = new[] { personRequestData };
requestData.connectorCodes = new[] { connectorCode };
ProcessRequestOut resp = c.groupRequest(auth, requestData);
}
Запрос успешно отправляется. Все стринговые свойства (idNum, idSeries, issueLocation) в запросе присутствуют. idType и consentEndDate нет (вообще их нет в структуре xml). Пытаясь разобраться, в отладчике увидел, что эти свойства возвращаются не как свойства, а как поля с ограниченным доступом (?):
Судя по всему, в этом и проблема. Если в сгенерированном классе сервис-референса убрать Nullable тип, то свойство возвращается в своём нормальном виде, но возникают другие проблемы при вызове сервиса.
Возможно ли как-то обойти проблему, желательно без внесения изменений в сгенерированный код? Доступа к исходному коду сервиса нет. Благодарю за любую помощь и идеи.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей