WCF - конвертировать пустой элемент в нуль-нативный тип
Оставление пустым элемента поля SOAP приводит к ошибке приведения для собственных типов. (к сожалению, не может использовать xsi: nil = "true" из-за ограничений клиента)
Пометка собственного типа контракта WCF как nullable <>, по-видимому, недостаточна, чтобы остановить следующую ошибку, возвращаемую клиенту.
Строка '' не является допустимым логическим значением. в System.Xml.XmlConvert.ToBoolean (String s) в System.Xml.XmlConverter.ToBoolean (String value) System.FormatException
Кто-нибудь знает лучший метод инструктирования DataContractSerializer для преобразования пустых элементов для десериализации в нуль?
Мой пример контракта на обслуживание WCF;
[ServiceContract()]
public interface IMyTest
{
[OperationContract]
string TestOperation(TestRequest request);
}
[ServiceBehavior()]
public class Settings : IMyTest
{
public string TestOperation(TestRequest request)
{
if (request.TestDetail.TestBool.HasValue)
return "Bool was specified";
else
return "Bool was null";
}
}
[DataContract()]
public class TestRequest
{
[DataMember(IsRequired = true)]
public int ID { get; set; }
[DataMember(IsRequired = true)]
public TestDetail TestDetail { get; set; }
}
[DataContract()]
public class TestDetail
{
[DataMember()]
public bool? TestBool { get; set; }
}
Как мы можем заставить WCF принять следующую заявку;
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ster="mynamespace">
<soapenv:Header/>
<soapenv:Body>
<ster:TestOperation>
<ster:request>
<ster:ID>1</ster:ID>
<ster:TestDetail>
<ster:TestBool></ster:TestBool>
</ster:TestDetail>
</ster:request>
</ster:TestOperation>
</soapenv:Body>
</soapenv:Envelope>
Клиент может только изменить значение, которое он вставляет<ster:TestBool>{here}</ster:TestBool>
так что правда ложь или ничего - единственные варианты.