Я хочу преобразовать мою Dictionary<int,List<int>>
строку в JSON. Кто-нибудь знает, как этого добиться на C #?
c#
json
dictionary
daehaai
источник
источник
Ответы:
Сериализация структур данных, содержащих только числовые или логические значения , довольно проста. Если вам нечего сериализовать, вы можете написать метод для вашего конкретного типа.
Для а
Dictionary<int, List<int>>
как вы определили, вы можете использовать Linq:Но если вы сериализуете несколько разных классов или более сложные структуры данных, или особенно если ваши данные содержат строковые значения , вам лучше использовать авторитетную библиотеку JSON, которая уже знает, как обрабатывать такие вещи, как escape-символы и разрывы строк. Json.NET - популярный вариант.
источник
В этом ответе упоминается Json.NET, но не рассказывается, как вы можете использовать Json.NET для сериализации словаря:
В отличие от JavaScriptSerializer, для работы JsonConvert
myDictionary
не обязательно должен быть словарь типа<string, string>
.источник
Json.NET, вероятно, сейчас адекватно сериализует словари C #, но когда OP изначально разместил этот вопрос, многие разработчики MVC, возможно, использовали класс JavaScriptSerializer, потому что это был вариант по умолчанию из коробки.
Если вы работаете над устаревшим проектом (MVC 1 или MVC 2) и не можете использовать Json.NET, я рекомендую вам использовать
List<KeyValuePair<K,V>>
вместоDictionary<K,V>>
. Унаследованный класс JavaScriptSerializer отлично сериализует этот тип, но у него будут проблемы со словарем.Документация: сериализация коллекций с помощью Json.NET
источник
Это напишет в консоль:
источник
Простой однострочный ответ
(
using System.Web.Script.Serialization
)Этот код преобразует все
Dictionary<Key,Value>
вDictionary<string,string>
и затем сериализует его как строку JSON:Стоит отметить, что что-то подобное
Dictionary<int, MyClass>
можно также сериализовать таким образом, сохраняя сложный тип / объект.Объяснение (разбивка)
Вы можете заменить переменную
yourDictionary
вашей фактической переменной.Мы делаем это, потому что и ключ, и значение должны иметь тип string, как требование для сериализации a
Dictionary
.источник
System.Web.Extensions
не в версии Client Framework, но также требует полной версии.Извините, если синтаксис малюсенький, но код, который я получил, изначально был в VB :)
источник
В Asp.net Core используют:
источник
System.Core
а затем попытался сослатьсяusing Newtonsoft.Json
и без радости. ДумаюNewtonsoft
, это сторонняя библиотека.Вы можете использовать
System.Web.Script.Serialization.JavaScriptSerializer
:источник
Вот как это сделать, используя только стандартные библиотеки .Net от Microsoft…
источник
Dictionary<string, dynamic>
всеми примитивными типами JSON, такими как промежуточные числа, числа с плавающей запятой, логические значения, строки и даже нули, и иметь в одном объекте. +1Вы можете использовать JavaScriptSerializer .
источник
string
. Я опубликовал здесь ответ, который включает это, если вы хотите посмотреть.Кажется, много разных библиотек и то, что не появилось и не исчезло за предыдущие годы. Однако по состоянию на апрель 2016 года это решение меня устраивало. Строки легко заменяются на целые .
TL / DR; Скопируйте это, если вы пришли сюда для этого:
Две точки импорта. Во-первых, не забудьте добавить System.Runtime.Serliazation в качестве ссылки в свой проект в обозревателе решений Visual Studio. Во-вторых, добавьте эту строку,
в верхней части файла с остальными вашими использованиями, чтобы
DataContractJsonSerializer
можно было найти класс. Это сообщение в блоге есть дополнительная информация об этом методе сериализации.Формат данных (ввод / вывод)
Мои данные - это словарь с 3 строками, каждая из которых указывает на список строк. Списки строк имеют длину 3, 4 и 1. Данные выглядят следующим образом:
Вывод, записанный в файл, будет в одной строке, вот форматированный вывод:
источник
Это похоже на то, что Меритт опубликовал ранее. просто разместите полный код
источник
Если ваш контекст позволяет это (технические ограничения и т. Д.), Используйте
JsonConvert.SerializeObject
метод Newtonsoft.Json : это облегчит вашу жизнь.источник