WCF: DeSerialize строки данных как int - PullRequest
1 голос
/ 09 октября 2009

Я действительно не могу понять это! (если это вообще возможно). От службы WCF мы получаем информацию о продукте. Контракт данных продукта имеет некоторые члены, которые определены как строки (но на самом деле являются целыми числами), но мы хотим обработать их как целые числа

Когда я изменяю тип данных в контракте на стороне клиента со строки на int, моя проблема решается. Однако некоторые продукты имеют значение string.Empty, которое нельзя десериализовать в int. Есть ли что-нибудь вокруг этого? На самом деле не хочу конвертировать мой набор результатов после десериализации ...

1 Ответ

1 голос
/ 09 октября 2009

Ну, поскольку те классы DataContract, которые вы получаете, всегда являются частичными классами, вы можете просто добавить второй частичный класс и предоставить свойства PropertyAsInt.

Примерно так:

public partial class Product
{
   public int ProductNumberAsInt
   {
       get 
       { 
          if(!string.IsNullOrEmpty(ProductNumber))
          {    
             int result = -1;

             if(int.TryParse(ProductNumber, out result)
                return result;
             else
                return -1;
          }

          return 0;
       }
    }
 }

Таким образом, вы просто определите свойство ProductNumberAsInt, которое будет проверять базовое строковое свойство с именем ProductNumber. Если это null или string.Empty, просто верните значение по умолчанию, например, -1 или 0 или все, что работает для вас.

Если это не ноль / пусто, вы можете попытаться преобразовать его в Int, и в случае успеха, вернуть это int - в противном случае вернуть другой индикатор (снова, выбирайте -1, 0, что бы вам ни показывалось) .

Таким образом, вам не нужно возиться с контрактами на данные WCF, без грязного ручного взлома, и вы можете настраивать эти дополнительные свойства по мере необходимости.

Марк

...