Possiamo rendere questo metodo generico?
Domanda
Ho visto questo metodo in un Esempio daXamarin , utilizzando JSON che accede a un server di riposo:
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> ();
}
});
}
.
Dove "CreaterQuest" e "ReadresponSpext" sono metodi che interagiscono con un server di riposo, in pratica ricevendo un elenco di paesi per deseriabilizzare e restituire nell'elenco. Quindi ora, sto cercando di rendere questo metodo generico per ricevere il tipo e restituire un elenco generico di oggetti del tipo specificato, qualcosa del genere:
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;
}
});
}
.
Quindi la mia domanda è, come posso creare il metodo sopra per poterlo utilizzare sempre meno come questo (lanciare la lista al mio tipo desiderato)?
List<Country> countries = (List<Country>)(List<?>) getListOfAnyObject("countries",Country.type);
.
Molte grazie in anticipo!
Soluzione
Prova qualcosa come questo ..
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;
}
});
}
.
chiamato come ..
List<Country> countries = getListOfAnyObject<Country>("countries");
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow