我有一个叫做的课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());
}
}
Run Code Online (Sandbox Code Playgroud)
在方法的最后一个语句中getdata(),传递类型:
JsonConvert.DeserializeObject</*here*/>(Stream.ReadToEnd())
Run Code Online (Sandbox Code Playgroud)
我想将类型作为参数传递给getdata(RootObject)方法.
有没有办法在C#中使用泛型来做到这一点?
Dmy*_*nko 12
实现强类型反序列化的标准方法是:
public T Get<T>()
{
string json = ...; // get data somehow
return JsonConvert.DeserializeObject<T>(json);
}
Run Code Online (Sandbox Code Playgroud)
看起来您想要异步读取结果,因此您需要实际返回结果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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处了解有关泛型的更多信息:https://msdn.microsoft.com/en-us/library/512aeb7t.aspx
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |