문제

샘플 에서이 방법을 보았습니다.Xamarin , JSON을 사용하여 REST 서버 액세스 :

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

CreateRequest "및"ReadResponSetext "는 휴식 서버와 상호 작용하는 메소드이며 기본적으로 목록에서 deserialize 및 반환 할 국가 목록을 수신합니다. 이제는 유형을 수신하고 지정된 유형의 오브젝트의 일반 목록을 반환하기 위해이 메서드를 제네릭으로 만들려고합니다.

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

그래서 제 질문은 다음과 같이 더 적게 사용하기 위해 위의 방법을 어떻게 작성할 수 있습니까?

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

미리 감사드립니다!

도움이 되었습니까?

해결책

이런 식으로 시도해보십시오.

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

라고 불리우십시오.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top