2013-06-26 3 views
1

Я использую Json.NET версии 5.0.6 в проекте Portable Class Library (который используется в приложении Windows Phone 8 application project). У меня есть данные 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

Мой плохой, я не знаю, в чем была проблема раньше, но я не смог воспроизвести это в проекте PCL, вызванном из консоли или приложения WP8. Теперь сервер возвращает Вероятность как «50.0» (без кавычек), поэтому мне пришлось изменить тип данных, чтобы удвоить для синтаксического анализа работу. Я предполагаю, что раньше я потерял «.0» от значения до создания надлежащих JSON DTO.