type query property newtonsoft jobject jarray example cast c# json.net

c# - query - Convierta Newtonsoft.Json.Linq.JArray a una lista de tipo de objeto específico



newtonsoft json linq query (4)

El ejemplo en la pregunta es un caso más simple donde los nombres de las propiedades coinciden exactamente en json y en el código. Si los nombres de las propiedades no coinciden exactamente, por ejemplo, la propiedad en json es "first_name": "Mark" y la propiedad en el código es FirstName luego use el método Select de la siguiente manera

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

Tengo la siguiente variable de tipo {Newtonsoft.Json.Linq.JArray} .

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

Lo que quiero lograr es convertir esto en List<SelectableEnumItem> donde SelectableEnumItem es del siguiente tipo:

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

Soy bastante ner a la programación y no estoy seguro si esto es posible. Cualquier ayuda con el ejemplo de trabajo será muy apreciada.


El valor de retorno de la API en mi caso como se muestra aquí:

{

"pageIndex": 1, "pageSize": 10, "totalCount": 1, "totalPageCount": 1, "elementos": [{"firstName": "Stephen", "otherNames": "Ebichondo", "phoneNumber": "+254721250736", "gender": 0, "clientStatus": 0, "dateOfBirth": "1979-08-16T00: 00: 00", "nationalID": "21734397", "emailAddress": "sebichondo @ gmail. com "," id ": 1," fecha agregada ":" 2018-02-02T00: 00: 00 "," fecha modificada ":" 2018-02-02T00: 00: 00 "}]," hasPreviousPage ": false" hasNextPage ": falso}

La conversión de la matriz de elementos a la lista de clientes se manejó como se muestra aquí:

if (responseMessage.IsSuccessStatusCode) { var responseData = responseMessage.Content.ReadAsStringAsync().Result; JObject result = JObject.Parse(responseData); var clientarray = result["items"].Value<JArray>(); List<Client> clients = clientarray.ToObject<List<Client>>(); return View(clients); }


Puedo pensar en un método diferente para lograr el mismo

IList<SelectableEnumItem> result= array;

o (tuve alguna situación que este no funcionó bien)

var result = (List<SelectableEnumItem>) array;

o use la extensión linq

var result = array.CastTo<List<SelectableEnumItem>>();

o

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

o más explícitamente

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

por favor, presten atención en la solución anterior utilicé el objeto dinámico

Puedo pensar en algunas soluciones más que son combinaciones de soluciones anteriores. pero creo que cubre casi todos los métodos disponibles.

Yo uso el primero


Simplemente llame al array.ToObject<List<SelectableEnumItem>>() . Devolverá lo que necesita.

Documentación: Convierte JSON a un Tipo