C# 动态物体投掷';不包含对…';集合中存在成员时发生异常
我对这段代码有问题:C# 动态物体投掷';不包含对…';集合中存在成员时发生异常,c#,dynamic,xamarin.android,expandoobject,C#,Dynamic,Xamarin.android,Expandoobject,我对这段代码有问题: IList<dynamic> list = await GetApiUrl("EndpointName").GetJsonListAsync(); // Call to API using FLUrl List<Model> modelList = new List<Model>(); foreach(var item in list) { var model = new Model() {
IList<dynamic> list = await GetApiUrl("EndpointName").GetJsonListAsync(); // Call to API using FLUrl
List<Model> modelList = new List<Model>();
foreach(var item in list)
{
var model = new Model()
{
GuidId = new Guid(item.Id),
Name = item.Name
}
modelList.Add(model);
}
public class Model
{
public Guid GuidId { get; set; }
public string Name { get; set; }
}
我在访问
item.Id
或item.Name
时遇到此异常,即使我已确认item对象确实具有Id
和Name
成员(请参见下图)
我在这里做错了什么?我已经找到了导致问题的原因,但问题相当严重 这段代码是Xamarin.Android应用程序的一部分,自从我开始处理这个项目以来,IDE中的异常设置对我来说非常重要,因为所有异常都禁用了“发生此异常时中断”。昨天(因为我厌倦了在文件中查找异常抛出的位置),我启用了该复选框,以便查看异常在运行时抛出的位置以及异常详细信息 当我在没有调试的情况下启动这个应用程序时,我得到了一个启示,它实际上可以工作(即使仍然抛出异常)。然后我想起了我昨天做的事情,并恢复了IDE中的异常设置,然后,TA DAAA,它工作了
我想这与Xamarin及其处理异常的方式有关。如果有人能详细说明这种行为,我很乐意接受他的回答
Id
和Name
是键
属性的值,而不是属性本身。无论如何,为什么您有一个动态对象,为什么不直接反序列化到模型
?是的,它们是键
集合的值,但是当与成员访问操作符一起使用时,动态对象不应该返回键的值(如果存在)?我使用IList是因为在IFlurlRequest上调用GetJSonListSync()时,FLUrl扩展将返回IList。参考源代码:事实上,是的,你是对的。这对我来说很管用:@Crowcoder你知道为什么我的代码不起作用吗?不,我在想一些事情,但我什么也没得到。我差点让你在不调试的情况下尝试,但我调试的时候没有发生,所以我没有问。我在谷歌搜索时遇到一个博客上的问题,上面提到了这个问题,但我关闭了它。
[
{
"Id": "9232f70b-bdc6-402c-9fab-250977e9a0c1",
"Name": "Sample name"
},
{
"Id": "0f746670-e057-4c13-9a82-c98419d09e55",
"Name": "Sample name"
},
{
"Id": "370cce64-37f6-4e71-a44e-32168c3ef2cb",
"Name": "Sample name"
}
]
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
''System.Dynamic.ExpandoObject' does not contain a definition for 'Id''