Я пытаюсь десериализовать вызов API Graph у друга из Facebook в список объектов. Объект JSON выглядит следующим образом:
{"data":[{"id":"518523721","name":"ftyft"},
{"id":"527032438","name":"ftyftyf"},
{"id":"527572047","name":"ftgft"},
{"id":"531141884","name":"ftftft"},
{"id":"532652067","name"...
List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);
Это не работает, потому что примитивный объект недействителен. Как я могу десериализовать это?
Dictionary<string,string>
, проверить: stackoverflow.com/questions/7699972/…Ответы:
Вам нужно создать такую структуру:
Тогда вы должны быть в состоянии сделать:
Имена моих классов - просто пример. Вы должны использовать собственные имена.
Добавление образца теста:
Производит:
источник
Иногда я предпочитаю динамические объекты:
источник
Отличный способ автоматически сгенерировать эти классы для вас - скопировать выходные данные JSON и добавить их сюда:
http://json2csharp.com/
Он предоставит вам отправную точку для подбора классов для десериализации.
источник
Очень легко мы можем проанализировать контент JSON с помощью словаря и JavaScriptSerializer. Вот пример кода, с помощью которого я анализирую содержимое JSON из файла Ashx.
источник
Newtonsoft.JSON
является хорошим решением для подобных ситуаций. ТакжеNewtonsof.JSON
быстрее, чем другие, такие какJavaScriptSerializer
,DataContractJsonSerializer
.В этом примере вы можете следующее:
Затем вы можете привести jsonData к
JArray
, и вы можете использоватьfor
цикл для получения данных на каждой итерации.Также я хочу кое-что добавить:
Работа с динамическим объектом и использование Newtonsoft serialize - хороший выбор.
источник
Я согласен с Icarus (прокомментировал бы, если бы мог), но вместо использования класса CustomObject я бы использовал словарь (на случай, если Facebook что-то добавит).
или
источник
public IList<IDictionary<string, dynmaic>> data { get; set; }
Сериализация:
Десериализация: :
Для десериализации динамического объекта
источник
Вы можете использовать это расширение
источник
Вот еще один сайт, который поможет вам со всем необходимым кодом, если у вас есть правильно отформатированная строка JSON:
https://app.quicktype.io/
источник
Если вы используете .NET Core 3.0, вы можете использовать System.Text.Json (который теперь встроен) для десериализации JSON.
Первым шагом является создание классов для моделирования JSON. Есть много инструментов, которые могут помочь с этим, и некоторые ответы здесь перечисляют их.
Некоторые варианты: http://json2csharp.com , http://app.quicktype.io или используйте Visual Studio (меню « Правка» → « Специальная вставка» → « Вставить JSON в качестве классов» ).
Затем вы можете десериализовать с помощью:
Если вам нужно добавить настройки, такие как
camelCase
обработка, передайте настройки сериализатора в десериализатор следующим образом:источник