WebInvoke / DataContractJsonSerializer, '1,6276' не может быть проанализирован как 'double' - PullRequest
1 голос
/ 03 апреля 2009

Я использую WCF WebInvokeAttribute для декларативных запросов JSON (DataContractJsonSerializer), с сериализацией на основе DataContractAttribute / DataMemberAttribute.

Я использую сервис, который поддерживает возврат данных JSON, содержащих данные разных культур. По умолчанию эта служба использует настройки языка en-US, что означает разделитель десятичных дробей ".".

У меня есть класс, у которого есть свойство System.Double. Если я запрашиваю данные, используя культуру, которая использует "," в качестве десятичного разделителя, я получаю SerializationException при попытке десериализации значения для этого свойства при разборе System.Double:

"Произошла ошибка при десериализации объекта типа XXX. Значение '1,6276' не может быть проанализировано как тип 'double'."

Это, безусловно, потому, что при анализе Двойника используется инвариантная культура. Я надеялся, что установка правильной культуры в текущем потоке исправит это, но это не так.

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

Буду признателен за помощь.

Спасибо!

1 Ответ

3 голосов
/ 06 апреля 2009

Согласно спецификации JSON число должно быть отформатировано с использованием точки. Другими словами, проблема не в части десериализатора, а в части сериализатора.

Если вам абсолютно необходимо использовать разделитель запятых, то я бы порекомендовал установить контракт, используя строку для типа свойства, и предоставить дополнительное свойство в вашем классе, которое не сериализовано для преобразования строки в десятичную ( тогда ты сможешь передать ту культуру, которая тебе нужна).

...