¿Podemos hacer este método genérico?
Pregunta
Vi este método en una Muestra deXamarin , utilizando JSON Acceso a un servidor de descanso:
List<Country> countries = new List<Country>();
public Task<List<Country>> GetCountries()
{
return Task.Factory.StartNew (() => {
try {
if(countries.Count > 0)
return countries;
var request = CreateRequest ("Countries");
string response = ReadResponseText (request);
countries = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Country>> (response);
return countries;
} catch (Exception ex) {
Console.WriteLine (ex);
return new List<Country> ();
}
});
}
Dónde "CreateRequest" y "ReadResponstext" son métodos que interactúan con un servidor de descanso, básicamente recibiendo una lista de países para deserializar y devolver en la lista. Así que ahora, estoy tratando de hacer este método genérico para recibir el tipo y devolver una lista genérica de objetos del tipo especificado, algo así:
public static Task<List<Object>> getListOfAnyObject(string requested_object, Type type)
{
return Task.Factory.StartNew (() => {
try {
var request = CreateRequest (requested_object);
string response = ReadResponseText (request);
List<Object> objects = // create a generic list based on the specified type
objects = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Object>> (response); // not sure how to handle this line
return objects;
} catch (Exception ex) {
Console.WriteLine (ex);
return ex.Message;
}
});
}
Entonces, mi pregunta es, ¿cómo puedo crear el método anterior para poder usarlo cada vez más y menos así (echando la lista a mi tipo deseado)?
List<Country> countries = (List<Country>)(List<?>) getListOfAnyObject("countries",Country.type);
¡Muchas gracias de antemano!
Solución
prueba algo como este ...
public static Task<List<T>> getListOfAnyObject<T>(string requested_object)
{
return Task.Factory.StartNew (() => {
try {
var request = CreateRequest (requested_object);
string response = ReadResponseText (request);
return Newtonsoft.Json.JsonConvert.DeserializeObject<List<T>> (response); // not sure how to handle this line
} catch (Exception ex) {
Console.WriteLine (ex);
return ex.Message;
}
});
}
Llamado así ..
List<Country> countries = getListOfAnyObject<Country>("countries");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow