【发布时间】:2020-08-14 21:14:16
【问题描述】:
我目前正在开发一个 .NET Framework 4.7.2 应用程序。我正在从 Web API 检索数据作为 JSON 字符串结果,我需要将结果转换为 ExpandoObject 的 IEnumerable 或 IList。
我的 JSON 可以具有动态属性,如下所示:
{ "data" : [
{"Id":1, Text:"Test1", coolProp: 213 },
{"Id":2, Text:"Test2"},
{"Id":3, Text:"Test3", otherProp: "cool" },
]}
我需要选择 JSON 对象,不带键“数据”并返回 ExpandoObjects 的动态列表。
我当前的 C# 如下所示:
var json = JsonConvert.DeserializeObject<ExpandoObject>(await response.Content.ReadAsStringAsync());
var result = json.FirstOrDefault(x => x.Key == "data").Value;
这很好用,但结果只是一个包含几个 ExpandoObjects 的简单对象。
我无法将结果转换为List<ExpandoObject>,无论是隐式还是显式。
当我尝试返回结果时,错误消息如下:
无法将类型“object”隐式转换为 List。
当我尝试显式转换时,结果为空:
var result= json.FirstOrDefault(x => x.Key == "data").Value as List<IDictionary<int, ExpandoObject>>;
没有强制转换的结果在即时窗口中看起来像这样:
result
Count = 7
[0]: {System.Dynamic.ExpandoObject}
[1]: {System.Dynamic.ExpandoObject}
[2]: {System.Dynamic.ExpandoObject}
[3]: {System.Dynamic.ExpandoObject}
[4]: {System.Dynamic.ExpandoObject}
[5]: {System.Dynamic.ExpandoObject}
[6]: {System.Dynamic.ExpandoObject}
你知道如何解决这个问题吗?或者,您知道更好的方法吗?我不想在结果中返回关键的“数据”,只是一个简单的动态对象列表。
谢谢!!
【问题讨论】:
-
你能发布你的 ExpandoObject 对象吗?
-
expandoobject 的内容包含了 json 的值,到目前为止还不错
-
在
json.FirstOrDefault(x => x.Key == "data").Value中Value的类型是什么?那不是ExpandoObject的数组吗? -
你能把它转换成
ExpandoObject的数组并调用.ToList()吗? -
感谢阿曼 B 的帮助!
标签: c# asp.net json expandoobject