Я сериализовал словарь с именем state1 в json на С# с помощью этого кода:
string json = JsonConvert.SerializeObject(state1, Formatting.Indented);
Значением этого словаря является другой словарь, и когда я десериализую файл json обратно в словарь, значения не десериализуются как словари (я не могу преобразовать object обратно в Dictionary<string, object>):
var values = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
Как правильно десериализовать json?
Вы должны опубликовать свой json, если вам нужна помощь
Как то, трудно понять ваш вопрос. Что вы подразумеваете под первичной формой? Не могли бы вы отредактировать свой вопрос, чтобы объяснить? Вы имеете в виду, что ваш исходный словарь был типа Dictionary<string, T> для некоторого T, а когда вы его десериализовали, он стал словарем типа Dictionary<string, object>, как указано в вашем вызове JsonConvert.DeserializeObject<Dictionary<string, object>>(json);?
Большое спасибо за ваш ответ. Я понял .Its<Dictionary<string, Dictionary<string, object>> . но есть ли способ превратить окончательную форму десериализованного файла в Dictionary<string, object> как var ? потому что другие функции распознают эту форму, и вы можете получить объект как другой словарь.
Вы говорите, что у вас возникли проблемы, потому что вы не можете привести объекты к словарям из-за того, что они являются экземплярами JObject?
На самом деле мой словарь похож на <Dictionary<string, Dictionary<string, object>>, и когда я десериализую файл json, другие функции его не получают. потому что они используют объект как другой словарь и нуждаются в этом: Dictionary<string, object> . есть ли другой способ превратить словарь в строку и вернуться к словарю без проблем?
Отвечает ли это на ваш вопрос? C# приводит Dictionary<string, AnyType> к Dictionary<string, Object> (включая отражение)





Если вы хотите вернуть исходную форму, вам нужно использовать исходный тип при десериализации.
Если, как видно из вашего комментария, это словарь словарей object, вам нужно будет использовать это при десериализации:
var values = JsonConvert
.DeserializeObject<Dictionary<string, Dictionary<string, object>>>(json);
Если вам нужно рассматривать это как Dictionary<string, object>, при этом гарантируя, что содержимое внутреннего словаря десериализовано как словари (а не JObject), вы можете «привести» его таким образом (согласно этому ответу):
var values = JsonConvert
.DeserializeObject<Dictionary<string, Dictionary<string, object>>>(json)
.ToDictionary(x => x.Key, x => (object)x.Value);
Привет, как дела? Моя другая проблема с json, по-видимому, связана с тем, что у меня есть переопределение строки ToString() в моих файлах структур, и когда я пытаюсь сериализовать этот словарь (<Dictionary<string, Dictionary<string, object>>) в файл json, этот ovveride не эффективен и при десериализации файла и возврате значений в структуру возникают ошибки. есть ли решение?
Привет @hesamgol, трудно сказать, не видя вашего кода, но вам может понадобиться использовать собственный Jsonconverter, если вы используете Newtonsoft: newtonsoft.com/json/help/html/JsonConverterAttributeClass.htm. Вероятно, вам следует задать новый вопрос о Stackoverflow, показывающем ваш код.
Tnx за ответ на мой вопрос. Я думаю, что вы правы, но я не знаю, как это использовать. плохо сделать новый вопрос. tnx братан
Если вы хотите вернуть исходную форму, вам нужно использовать исходный тип при десериализации. Что такое тип
state1? Например, если это словарь словарей строк, вам нужно будет использовать это при десериализации:JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(json);.