2009-04-03 3 views
1

선언적 JSON 요청 (DataContractJsonSerializer)에 WCF WebInvokeAttribute, DataContractAttribute/DataMemberAttribute 기반 직렬화에 을 사용하고 있습니다.WebInvoke/DataContractJsonSerializer, '1,6276'을 'double'로 구문 분석 할 수 없습니다.

다른 culture를 기반으로하는 데이터가 포함 된 JSON 반환을 지원하는 서비스를 사용하고 있습니다. 기본적으로이 서비스는 en-US culture 설정을 사용합니다. 즉, 소수 구분 기호는 "."입니다.

System.Double 속성을 가진 클래스가 있습니다. ","소수 구분 기호로 사용하는 문화권을 사용하여 데이터를 요청할 경우 System.Double을 구문 분석 할 때이 속성의 값을 역 직렬화하려고 시도하는 동안 SerializationException이 나타납니다.

"개체를 deserialize하는 동안 오류가 발생했습니다. 값 '1,6276'은 'double'유형으로 구문 분석 할 수 없습니다. "

이것은 Double을 구문 분석하는 동안 불변의 문화가 사용되기 때문입니다. 현재 스레드에서 올바른 문화권을 설정하면이 문제를 해결할 수 있기를 기대했지만 그렇지 않았습니다.

따라서 "."을 사용하지 않는 문화권에서는 서비스가 중단됩니다. 소수점 구분 기호로 사용됩니다.

도움을 주셔서 감사합니다.

고마워!

+0

문화가 서비스의 요소 인 이유와 이것이 다른 서비스와 다른 점을 조금 더 잘 설명해주십시오. 이전에이 문제에 대해 들어 본 적이있을 것입니다. –

+0

다음은 서비스 클라이언트입니다. http://www.codeproject.com/KB/WCF/GeoNames-WCFClient.aspx 이 구성 요소의 사용자는 처음에이 버그를 발견했습니다. 맨 아래에있는 Derserialization Error 스레드를 읽으십시오. 감사 – baretta

답변

3

JSON Specification에 따르면 숫자는 마침표를 사용하여 형식을 지정해야합니다. 즉, 문제는 디시리얼라이저 부분에있는 것이 아니라 직렬화 부분에 있습니다.

절대적으로 쉼표 구분 기호를 사용해야하는 경우 속성 유형에 대한 문자열을 사용하여 계약을 설정하고 클래스에 직렬화되지 않은 추가 속성을 제공하여 문자열을 10 진수로 변환하는 것이 좋습니다 그런 다음 필요한 모든 문화를 전달할 수 있습니다.

관련 문제