簡體   English   中英

將類型作為參數傳遞給方法

[英]Pass a type as parameter to method

我有一個叫做RootObject的類:

public class RootObject
{
    public string Name { get; set; }
    public int Age { get; set; }
    public int Address { get; set; }
}

public void getdata()
{
    WebRequest request = WebRequest.Create("http://addresstojson.com/json.json");
    WebResponse response = await request.GetResponseAsync();

    using (var stream = new StreamReader(response.GetResponseStream()))
    {
       json = JsonConvert.DeserializeObject<RootObject>(stream.ReadToEnd());
    }
}

getdata()方法的最后一條語句中,傳遞類型:

JsonConvert.DeserializeObject</*here*/>(Stream.ReadToEnd())

我想將類型作為參數傳遞給getdata(RootObject)方法。

有沒有辦法在C#中使用泛型呢?

實現強類型反序列化的標准方法是:

public T Get<T>()
{
    string json = ...; // get data somehow
    return JsonConvert.DeserializeObject<T>(json);
}

看起來您想異步讀取結果,因此您實際上需要將結果作為Task<T> ,並使用讀取數據的方法的xxxxAsync版本:

public Task<T> GetData<T>()
{
    WebRequest request = WebRequest.Create("http://addresstojson.com/json.json");
    using (WebResponse response = await request.GetResponseAsync())
    {
        using(var stream = new StreamReader(response.GetResponseStream()))
        {
            string json = await stream.ReadToEndAsync();
            T result = JsonConvert.DeserializeObject<T>();
            return result;
        }
    }
}

您可以在此處了解有關泛型的更多信息: https : //msdn.microsoft.com/zh-cn/library/512aeb7t.aspx

public static async Task<T> GetData<T>(string add)
    {
        WebRequest request = WebRequest.Create(add);
        WebResponse response = await request.GetResponseAsync();

        using (var stream = new StreamReader(response.GetResponseStream()))
        {
            return JsonConvert.DeserializeObject<T>(stream.ReadToEnd());
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM