我正在使用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
的返回值是一个包含一个 ExpandoObject
的正确构造的 List<object>
,但代码尝试将该列表强制转换为一个 ExpandoObject 本身(T 的值),导致失败。
我有一个失败的单元测试,并可以修复它,但不确定如何直接将List
插入到ExpandoObject
中。
这个可能吗?DynamicObject
有 TryGetIndex
,所以我认为一个 ExpandoObject
可以具有索引器。是否需要通过动态提供索引方法的实现来仔细构建类似于列表的 expando 实例,或者创建一个非 expando 的 DynamicObject
来保存列表并从动态方法调用中调用正确的方法呢?