【发布时间】:2014-06-05 00:05:10
【问题描述】:
我正在使用 Json.Net 使用如下代码将 json 结果反序列化为 ExpandoObjects:
var converter = new ExpandoObjectConverter();
dynamic d = JsonConvert.DeserializeObject<ExpandoObject>(json, converter);
这适用于除了在 json 架构根目录中只有一个列表的响应之外的所有内容,例如:
string json = @"[{""title"": ""the title""}]";
JsonConvert 的内部是这个方法:
public static T DeserializeObject<T>(string value, params JsonConverter[] converters)
{
return (T)DeserializeObject(value, typeof(T), converters);
}
返回值DeserializeObject 是一个正确构造的List<object>,其中包含ExpandoObject,但代码尝试将该列表转换为ExpandoObject 本身(T 的值)失败。
我有一个失败的单元测试,可以解决这个问题,但我不确定如何将 List 直接填充到 ExpandoObject 中。
这可能吗? DynamicObject 有 TryGetIndex 所以我假设 ExpandoObject 可以有一个索引器。是否有必要通过动态提供索引方法的实现来仔细构造类似列表的 expando 实例,或者创建一个非扩展 DynamicObject 来保存列表并从动态方法调用中正确调用方法?
【问题讨论】:
标签: c# json json.net dynamic-language-runtime expandoobject