【发布时间】:2017-11-16 16:12:58
【问题描述】:
我正在使用 Newtonsoft.JSON。我不知道传递给此方法或检索到此方法的对象类型,因此我尝试在我不知道其类型的对象上使用DeserializeObject。
这可能吗?如果是这样,怎么做? 这是我的代码。
public static List<T> GetObject<T>(string cacheKey, IEnumerable<T> obj)
{
using (HttpClient client = new HttpClient())
{
var response = client.GetAsync("http://localhost:53805/api/NonPersisted/Get/" + cacheKey).Result;
obj = JsonConvert.DeserializeObject<obj.GetType>(response.Content.ToString());
return obj.ToList();
}
}
我首先尝试使用
obj = JsonConvert.DeserializeObject<List<T>>(response.Content.ToString());
这不起作用,显然,它无法解析。
获取对象的类型不会生成,它说obj is a variable but used like a type。
编辑
看来您可以在不知道 JsonConvert.DeserializeObject<> 类型的情况下使用通用 List<T> 真正的错误是 response.Content 仅返回类型。你需要...
obj = JsonConvert.DeserializeObject<List<T>>(response.Content.ReadAsStringAsync().Result);
【问题讨论】:
-
JsonConvert.DeserializeObject
- > 不起作用?
-
如何使用动态
obj = JsonConvert.DeserializeObject<dynamic>(response.Content);,然后访问您的属性,例如obj.MyCustomProperty -
@ChetanRanpariya 我知道它总是一个列表,不,我不能转换为我不知道的类型。通常你写
JsonConvert.DeserializeObject<SomeObject>,它知道所有的属性,所以它可以转换为类型SomeObject,在我的例子中,我不能强类型List<T> -
当你尝试这样做时会发生什么?
-
顺便问一下,您确定您的 API 总是返回对象列表而不是单个对象吗?我看不出 DeserializeObject
- > 在您的情况下不应该起作用的原因。你的 json 结构有问题
标签: c# generics serialization json.net