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