【发布时间】:2014-05-05 16:59:42
【问题描述】:
在 Json.NET 文档中 performance tips 的帮助下,我整理了一种从远程资源下载/反序列化 JSON 的方法:
public async Task<T> GetJsonAsync<T>(string url)
{
using (var stream = await new HttpClient().GetStreamAsync(url))
{
using (var sr = new StreamReader(stream))
{
using (var jr = new JsonTextReader(sr))
{
return new JsonSerializer().Deserialize<T>(jr);
}
}
}
}
我想要一个返回dynamic 的非通用版本。使用GetJsonAsync<dynamic>(url) 调用上述方法有效,直到您尝试访问结果上的动态属性,此时我得到:
'Newtonsoft.Json.Linq.JObject' does not contain a definition for '[MyProperty]'
我已经从字符串中看到how to deserialize to a dynamic,但还没有看到直接从流中执行此操作的工作示例,因为它更节省内存,因此更可取。这可能吗?
【问题讨论】:
-
你确定你有一个包含 json 的流,并且在你访问它的任何位置都有一个带有 MyProperty 的 json?你能用
MemoryStream制作这个吗? -
绝对确定。我用 MyProperty 创建了一个类,并使用它 (
GetJsonAsync<MyClass>) 测试了相同的端点,它返回的正是我所期望的。动态版本不行。
标签: c# .net json stream json.net