Question

J'ai vu cette méthode dans un échantillon deXamarin , en utilisant JSON accessible à un serveur de repos:

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> ();
            }
        });
    }

où "CreathereQuest" et "ReadResponseText" sont des méthodes qui interagissent avec un serveur de repos, recevant essentiellement une liste de pays pour désérialiser et revenir dans la liste. Alors maintenant, j'essaie de faire cette méthode générique afin de recevoir le type et de renvoyer une liste générique d'objets du type spécifié, quelque chose comme ceci:

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;
            }
        });
    }

Donc, ma question est, comment puis-je créer la méthode ci-dessus afin de l'utiliser de plus en moins comme celle-ci (jeter la liste sur mon type souhaité)?

List<Country> countries = (List<Country>)(List<?>) getListOfAnyObject("countries",Country.type);

Merci d'avance!

Était-ce utile?

La solution

Essayez quelque chose comme ça ..

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;
       }
   });
}

appelé comme si.

List<Country> countries = getListOfAnyObject<Country>("countries");

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top