Результат WCF десериализуется до значений по умолчанию для типов значений в списке пар ключ / значение - PullRequest
1 голос
/ 29 июля 2011

У меня есть служба WCF, и в результате получается пользовательский класс TimeSeries, определенный как:

[DataContract]
public class TimeSeries
{
  [DataMember]
  public string Name { get; set; }
  [DataMember]
  public List<KeyValuePair<DateTime, double>> Data { get; set; }
}

Мой метод службы создает массив этих объектов для возврата.Отлаживая метод сервиса, я вижу, что массив, содержащий один из этих объектов, создан правильно (он имеет имя и 37 пар vk данных).Используя Fiddler, я вижу, что объект сериализуется и отправляется (данные все еще верны в ответе HTTP).Однако проблема возникает, когда на клиенте я проверяю объект результата, и это неверно.В частности, я получаю объект TimeSeries с правильным именем и правильным числом пар kv, но они содержат значения по умолчанию для каждого DateTime и double (то есть 01/01/0001 12:00 AM & 0.0).

Мой клиент - Silverlight v4, и я использую автоматически сгенерированный сервисный справочник.Проблема, по-видимому, связана с десериализацией.У кого-нибудь есть мысли о том, почему он это делает, чего мне не хватает или как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Как указано в Сериализация списка пар ключ / значение в XML :

KeyValuePair не сериализуем, потому что он имеет свойства только для чтения

Итак, вам нужен ваш собственный класс, как и в ответе на этой странице.

0 голосов
/ 14 марта 2012

Альтернативой, а не использованием собственного класса, является использование Dictionary<DateTime,double> вместо этого, который, похоже, отлично сериализуется и десериализуется.

...