Словарь сериализации C # Newtonsoft json сохраняется как

#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 должен использовать строки для своих ключей.

https://www.w3schools.com/js/js_json_objects.asp#:~:text=Object Syntaxamp;text=JSON objects are written in,are separated by a colon.

Комментарии:

1. Спасибо. Я понял. Я играл в jsoneditoronline.org который по какой-то причине поддерживает целочисленные ключи json.