我有一个返回Response2
的类,其中只包含我关心的两个定义:
Response3.Id
Response3.Name
但是,这个数据作为列表返回,b / c我的类定义如下所示:
[DataContract]
public class Response2
{
[DataMember(Name = "done")]
public bool done;
[DataMember(Name = "records")]
public List<Response3> r3entry;
}
[DataContract]
public class Response3
{
[DataMember(Name = "Id")]
public string strId { get; set; }
[DataMember(Name = "Name")]
public string strName { get; set; }
}
现在我有一个要迭代的字符串列表,但是当我尝试执行以下操作时:
Response2 propResponse2 = MakeRequest2(propertyRequest2, sfToken);
foreach (string strId in propResponse2)
{
System.Windows.Forms.MessageBox.Show(strId.Name)
}
我收到错误声明:
foreach语句不能对“Response2”类型的变量进行操作,因为“Response2”不包含“GetEnumerator”的公共定义
我认为这意味着我需要在类中向DataContract添加一些东西,但我不知道在哪里这样做,所以我可以正确迭代。
任何帮助?
答案 0 :(得分:2)
foreach (var resp3 in propResponse2.r3entry)
{
System.Windows.Forms.MessageBox.Show(resp3.strName)
}
答案 1 :(得分:1)
要做你想做的事(如果那确实是你想要的),你需要使用reflection
foreach (var field in propResponse2.GetType().GetFields())
{
System.Windows.Forms.MessageBox.Show(field.GetValue(propResponse2).ToString());
}
如果另一方面你想要从所有字段中获取所有[DataContract]属性,那么:
foreach (DataContract dc in propResponse2.GetType()
.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(m => m.GetCustomAttributes(typeof(DataContract), false).Length > 0)
.SelectMany(m => m.GetCustomAttributes(false).OfType<DataContract>()).ToArray())
{
System.Windows.Forms.MessageBox.Show(dc.Name);
}