2013-06-26 2 views
1

휴대용 클래스 라이브러리 프로젝트 (Windows Phone 8 응용 프로그램 프로젝트에서 사용됨)에서 Json.NET 버전 5.0.6을 사용하고 있습니다. 다음 값을 포함하는 JSON 데이터가 있습니다. 내가 모델에 정수로 확률을 정의하면휴대용 클래스 라이브러리에서 JSson.NET 정수 구문 분석이 실패합니다.

{ 
    [..] 
"Probability": 50, 
    [..] 
} 

지금, 역 직렬화는 System.FormatException 실패 : 입력 문자열의 형식이 잘못되었습니다. 내가 문자열로 모델의 속성 유형을 변경하면

at Newtonsoft.Json.Utilities.ConvertUtils.Int32Parse(Char[] chars, Int32 start, Int32 length) 
    at Newtonsoft.Json.JsonTextReader.ParseNumber() 
    at Newtonsoft.Json.JsonTextReader.ParseValue() 
    at Newtonsoft.Json.JsonTextReader.ReadInternal() 
    at Newtonsoft.Json.JsonReader.ReadAsInt32Internal() 
    at Newtonsoft.Json.JsonTextReader.ReadAsInt32() 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) 
    at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) 
    at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) 
    at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) 
    at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) 
    at Newtonsoft.Json.JsonConvert.<>c__DisplayClass6`1.<DeserializeObjectAsync>b__5() 
    at System.Threading.Tasks.Task`1.InnerInvoke() 

는 직렬화가 잘 통과하고 필드 값 "50"를 가져옵니다. 이것은 Json.NET의 버그입니까? 나에게 그렇게 보입니다. 나는 이것을 게시하기에 더 좋은 장소를 찾고 있었지만, 이제 명백한 SO가 선호 채널이다.

+0

http://json.codeplex.com/workitem/list/basic에서 버그를보고 할 수 있어야합니다. – TheESJ

답변

0

내 문제는 이전에 어떤 문제인지 모르지만 콘솔이나 WP8 앱에서 호출 된 PCL 프로젝트에서이를 재현 할 수 없었습니다. 이제 서버는 Probability를 "50.0"(따옴표 제외)으로 반환하므로 구문 분석을 위해 데이터 형식을 두 배로 변경해야했습니다. 이전에는 적절한 JSON DTO를 생성하기 전에 값에서 ".0"을 잃어 버렸던 것 같습니다.

관련 문제