#c# #json.net
#c# #json.net
Вопрос:
Я пытаюсь загрузить некоторую сохраненную строку json и превратить ее в словарь <int, int>, затем добавить некоторые элементы, а затем превратить его обратно в строку. Но по какой-то причине ключ сохраняется как строка, а не как int .
Я использую следующий код:
using Newtonsoft.Json;
var dictionary = JsonConvert.DeserializeObject<Dictionary<int, int>>("{}");
dictionary[1] = 1;
string updatedDictionary = JsonConvert.SerializeObject(dictionary);
Debug.Log(updatedDictionary); // {"1":1}
Debug.Log(updatedDictionary[1]); // "
но обновленный справочник печатается как {"1":1}
… почему это так? И как я могу это исправить? Я не могу событие просто преобразовать в строку при поиске по словарю, потому что он разрешает только поиск int. Поэтому мне действительно нужно убедиться, что json сохраняется как int int key value pair , а не превращается в строковые ключи.
То же самое происходит, когда я это делаю dictionary.Add(1, 1)
, поэтому я уверен, что проблема заключается в вызове SerializeObject .
Комментарии:
1. Вы пытались десериализовать updatedictionary ? Что, если dictionary = JsonConvert . DeserializeObject<Dictionary<int, int>>(обновленный справочник); ?
2. Исправлять нечего. Не указывать их было бы несоответствующим.
3. Не могли бы вы уточнить, как вы ожидаете, что результирующий файл JSON будет выглядеть?
4. Он идеально совместим.
JsonConvert
переведет ключи обратно в int при десериализацииDictionary<int,int>
. Просто не ожидайте получить{1:1}
сериализованную форму. Это неправильный JSON.{"1":1}
есть.5.
Debug.Log
регистрирует символы изupdatedDictionary
, которые являются строкой, содержащей{"1":1}
. В нем есть[0] == '{'
,[1] == '"'
, и так далее. Десериализуйте его обратноDictionary<int, int>
, и у него будет ключ1
со значением1
, оба целых числа.
Ответ №1:
Объект Json должен использовать строки для своих ключей.
Комментарии:
1. Спасибо. Я понял. Я играл в jsoneditoronline.org который по какой-то причине поддерживает целочисленные ключи json.