Преобразовать Newtonsoft.Json.Linq.JArray в список определенного типа объекта

У меня есть следующая переменная типа {Newtonsoft.Json.Linq.JArray} .

 properties["Value"] {[ { "Name": "Username", "Selected": true }, { "Name": "Password", "Selected": true } ]} 

Я хочу выполнить преобразование в List где SelectableEnumItem имеет следующий тип:

 public class SelectableEnumItem { public string Name { get; set; } public bool Selected { get; set; } } 

Я предпочитаю программировать, и я не уверен, возможно ли это. Любая помощь с рабочим примером будет принята с благодарностью.

Просто вызовите array.ToObject>() . Он вернет вам то, что вам нужно.

Документация: конвертировать JSON в тип

Пример в вопросе – это более простой случай, когда имена свойств совпадают точно в json и в коде. Если имена свойств точно не совпадают, например, свойство в json является "first_name": "Mark" а свойство в коде – FirstName затем используйте метод Select следующим образом

 List items = ((JArray)array).Select(x => new SelectableEnumItem { FirstName = (string)x["first_name"], Selected = (bool)x["selected"] }).ToList(); 

Я могу думать о другом методе для достижения того же

 IList result= array; 

или (у меня была какая-то ситуация, когда эта работа не срабатывала)

 var result = (List) array; 

или использовать расширение linq

 var result = array.CastTo>(); 

или

 var result= array.Select(x=> x).ToArray(); 

или более эксплицитно

 var result= array.Select(x=> new SelectableEnumItem{FirstName= x.Name, Selected = bool.Parse(x.selected) }); 

обратите внимание на приведенное выше решение. Я использовал динамический объект

Я могу придумать еще несколько решений, которые представляют собой комбинации вышеупомянутых решений. но я думаю, что он охватывает почти все доступные методы.

Я сам использую первый

 using Newtonsoft.Json.Linq; using System.Linq; using System.IO; using System.Collections.Generic; public List GetJsonValues(string filePath, string propertyName) { List values = new List(); string read = string.Empty; using (StreamReader r = new StreamReader(filePath)) { var json = r.ReadToEnd(); var jObj = JObject.Parse(json); foreach (var j in jObj.Properties()) { if (j.Name.Equals(propertyName)) { var value = jObj[j.Name] as JArray; return values = value.ToObject>(); } } return values; } } 

Возвращаемое значение API в моем случае, как показано ниже:

 { "pageIndex": 1, "pageSize": 10, "totalCount": 1, "totalPageCount": 1, "items": [ { "firstName": "Stephen", "otherNames": "Ebichondo", "phoneNumber": "+254721250736", "gender": 0, "clientStatus": 0, "dateOfBirth": "1979-08-16T00:00:00", "nationalID": "21734397", "emailAddress": "[email protected]", "id": 1, "addedDate": "2018-02-02T00:00:00", "modifiedDate": "2018-02-02T00:00:00" } ], "hasPreviousPage": false, "hasNextPage": false } 

Преобразование массива элементов в список клиентов обрабатывалось, как показано здесь:

  if (responseMessage.IsSuccessStatusCode) { var responseData = responseMessage.Content.ReadAsStringAsync().Result; JObject result = JObject.Parse(responseData); var clientarray = result["items"].Value(); List clients = clientarray.ToObject>(); return View(clients); } 
  • Как конвертировать JSON в XML или XML в JSON?
  • Как игнорировать свойство в classе, если null, используя json.net
  • Ошибка JSON.NET Локальный цикл привязки для типа
  • Как изменить имена свойств при сериализации с помощью Json.net?
  • Отключить использование JSON.net
  • Настройка пользовательских дат WebApi Json.NET
  • Как десериализовать объект JObject для .NET
  • JSON.Net выдает StackOverflowException при использовании
  • Установка стандартного JSON-сериализатора в ASP.NET MVC
  • Как сериализовать словарь как часть его родительского объекта с помощью Json.Net
  • Как пропустить / игнорировать / пропускать пустые литералы объектов в выпуске JSON?
  • Interesting Posts

    лексеры против парсеров

    Инструмент для установки установленных компонентов на ПК

    Внедрение iframe на страницу с ограничительной политикой безопасности контента

    Цикл «для» добавляет только последний слой ggplot

    Excel VBA – преобразовать текст в дату?

    Как заставить git не запрашивать парольную фразу для ssh-ключа на окнах?

    MYSQL в outfile «access denied» – но мой пользователь имеет доступ «ВСЕ» .. и папка CHMOD 777

    Лицензия Windows с Thinkpad

    Получить текущий видимый текст в текстовом виде

    Можно ли проверить, подтверждено ли электронное письмо на Facebook?

    Сжатие медленного привода для производительности?

    Можно ли отключить прокрутку на ViewPager

    Невозможно найти один или несколько типов, необходимых для компиляции динамического выражения. Вам не хватает ссылки на файлы Microsoft.CSharp.dll и в System.Core.dll?

    Что такое функторы C ++ и их использование?

    Безопасное переопределение виртуальных функций C ++

    Давайте будем гением компьютера.