검색결과 리스트
jil에 해당되는 글 1건
- 2014.11.28 [.NET] Json 라이브러리 Jil의 'Expected digit' 예외
클라이언트와 Json 데이터를 주고 받는 도중 숫자가 포함된 Json 문자열을 구조체로 Deserialize 할 때
'Expected digit' 예외가 발생.
var jsonObject = Jil.JSON.Deserialize<REQUSET_T>(decryptData);
위치: Jil.Deserialize.Methods._ReadInt64(TextReader reader) 파일 c:\Users\kevin_000\Dropbox\jil\Jil\Deserialize\Methods.ReadNumbers.cs:줄 519
위치: _DynamicMethod0(TextReader )
위치: Jil.JSON.Deserialize[T](TextReader reader, Options options) 파일 c:\Users\kevin_000\Dropbox\jil\Jil\JSON.cs:줄 579
테스트로 Jil로 숫자가 포함된 구조체를 Serialize한 Deserialize 하면 아무런 문제가 없음.
그러나 같은 내용을 클라이언트에서 JsonFX로 Serialize한 후 Jil로 Deserialize 하면 여전히 예외발생.
이번에는 JsonFX로 Serialize 하고, Json.NET로 Deserialize 해 보았음. 아무런 문제 없음.
그래서 JsonFx와 Jil로 Serialize 할 때의 차이를 보니 아래와 같음
JsonFX: {"LSeq":"533157870896947200","ID":"Dummy_1","AT":"63327632"}
Jil: {"LSeq":533157870896947200,"ID":"Dummy_1","AT":"63327632"}
LSeq가 정수인데 JsonFX는 값을 문자열처럼 만듬, 그에 비해 Jil은 숫자로 표시
JsonFX나 Json.NET은 "533157870896947200" 표현되더라도 Deserialize 할 때 해당 필드가 정수라면 정수로 변환해줌.
그러나 Jil은 문자열로만 인식하여 정수가 아니라고 예외를 발생 시킴.
이 문제를 해결할 방법이 없는한 Jil로 Json 포맷을 다루지 않는 경우라면 Jil은 사용하지 않아야 됨
===> 이 문제는 JsonFX의 문제가 아니고 Json 사양에 따른 문제임
Json은 정수는 int와 double만 지원한다. 만약 double 보다 큰 값을 사용하면 문자열로 치환한다.
위에서 LSeq의 값은 Int64의 값으로 double의 최대값 보다 크다. 그래서 JsonFX에서 문자열로 표현하였다.
Jil은 Json 사양과 다르게 Int64를 지원한다. 그래서 LSeq 값을 정수로 표현하였다.
댓글