gpt4 book ai didi

c# - ExpandoObject 可以是列表吗?

转载 作者:太空狗 更新时间:2023-10-29 23:38:49 24 4
gpt4 key购买 nike

我正在使用 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 实例,或者以其他方式创建非 expando DynamicObject保存列表并从动态方法调用中调用正确的方法?

最佳答案

DynamicObject has TryGetIndex so I assume an ExpandoObject can have an indexer

不,它不能。试一试,它返回一个 RuntimeBinderException:

Cannot apply indexing with [] to an expression of type 'System.Dynamic.ExpandoObject'

ExpandoObject 不是列表;它更像是一本字典。

Would it be necessary to carefully construct a list-like instance of expando by dynamically supplying the implementation of an indexing method or otherwise create a non-expando DynamicObject to hold the list and invoke the correctly methods from dynamic method calls?

好吧,您可以创建一个行为类似于列表的自定义 DynamicObject,但我认为这样做没有任何好处:您还不如使用普通列表。

关于c# - ExpandoObject 可以是列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com