Почему JsonConvert выдает исключение при десериализации в словарь

У меня проблема с сериализацией строки JSON в словарь ключ / значение. Код похож на:

var parameters = "{\"id\":123}";
JsonConvert.DeserializeObject<Dictionary<string, string>>(parameters);

Этот пример, кажется, работает отлично, давая мне {[id,123]}.

Сейчас. Когда я изменяю число на что-то вроде "070809", я неожиданно получаю исключение: "Newtonsoft.Json.JsonReaderException: входная строка" 070809 "не является допустимым числом. Путь" id ", строка 1, позиция 12. ---> System.FormatException: дополнительные непарсируемые символы находятся в конце строки."

var parameters = "{\"id\":070809}";
JsonConvert.DeserializeObject<Dictionary<string, string>>(parameters);

Какие-либо предложения?

1 ответ

Решение

Ваш второй пример не является допустимым JSON. Напомним, что JSON основан на JavaScript, и на этом языке любой числовой литерал, который начинается с 0, интерпретируется как восьмеричное число. Действительные восьмеричные цифры 0-7, поэтому, если литерал содержит 8 или 9, он не может быть проанализирован и вызовет ошибку. ("010203" работает, потому что это действительный восьмеричный литерал, а "070809" - нет)

Другие вопросы по тегам