Десериализация SOAP-ответа с пустым или недействительным элементом даты - PullRequest
3 голосов
/ 03 февраля 2012

Я использую веб-сервис SAP-NetWeaver. Объект ответа содержит данные, и когда он не установлен, он возвращает «0000-00-00». Это приводит к ошибке десериализации в моем прокси .NET 4.0 WCF, поскольку минимальная допустимая дата для .NET будет "0001-01-01".

Я попросил разработчика SAP декорировать элемент date атрибутом minoccurs = "0" и опустить его, если значения нет, но он утверждает, что не может этого сделать.

Прежде чем я попрошу его вернуть "0001-01-01" для пустых дат - только для моего прокси WCF - я хотел бы знать:

  1. Является ли "0000-00-00" действительной датой с точки зрения SOAP? Не удалось найти его ни в одной спецификации SOAP, поэтому, пожалуйста, дайте мне знать ваш источник информации.

  2. Есть ли способ сообщить десериализатору .NET, что он принимает "0000-00-00" и обрабатывает его как DateTime.MinValue?

Большое спасибо!

UPDATE: Теперь веб-сервис SAP возвращает пустой элемент, если дата равна нулю. Но моя проблема остается прежней.

Ответы [ 2 ]

1 голос
/ 03 февраля 2012

есть хороший разговор по этому вопросу

здесь

можно просто реализовать пользовательскую сериализацию класса.так что значения «0000-00-00» будут пойманы и преобразованы в DateTime.MinValue.UPD: это код, о котором я говорил.

[OnDeserializing]
void OnDeserializing(StreamingContext c)
{
  if (MyCustonObj == null)
  {
    MyCustonObj = new MyCustomClass();
    MyCustonObj.MyStrData = "Overridden in  deserializing";
  }
}
0 голосов
/ 27 февраля 2012

Вы можете реализовать расширение SOAP для изменения SOAP до его десериализации:

http://msdn.microsoft.com/en-us/library/7w06t139.aspx

...