Преобразовать 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); } 
  • Регистрация пользовательского JsonConverter по всему миру в Json.Net
  • Указание пользовательского формата DateTime при сериализации с помощью Json.Net
  • Как я могу разбирать JSON с C #?
  • Информация о сериализации типов кеша Json.NET?
  • Как пропустить / игнорировать / пропускать пустые литералы объектов в выпуске JSON?
  • Как убедиться, что строка действительна JSON с использованием JSON.NET
  • Разбор большого json-файла в .NET.
  • Создание десериализации свойств, но не сериализация с помощью json.net
  • Сериализация нескольких свойств DateTime в одном classе с использованием разных форматов для каждого из них
  • Как десериализовать JSON с двойными именами свойств в одном и том же объекте
  • Как десериализовать объект JObject для .NET
  • Interesting Posts

    Как создать элементарный stream AAC ADTS с Android MediaCodec

    Когда лучше использовать String.Format vs string concatenation?

    Создание структуры составных ключевых объектов

    Программа, созданная с помощью PyInstaller, теперь рассматривается как троянский конь AVG

    Когда все в порядке, чтобы поймать OutOfMemoryException и как с ним справиться?

    Не удается удалить элемент «Не удалось найти этот элемент»

    Переименуйте несколько файлов, заменив определенный шаблон в именах файлов, используя сценарий оболочки

    Как определить, что вы работаете под виртуальной машиной?

    MVC3 и Entity Framework

    Какие библиотеки парсеров для анализа существуют для C ++?

    Как я могу избежать восклицательного знака! в сценариях cmd?

    Наименьшее общее число для 3 или более номеров

    Как удалить несколько фрагментов сразу или по группам из меню «Пуск»?

    Как найти значения Hex, которые мне нужно использовать для потока ниже?

    Написание текстового файла на SD-карту не удается

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