首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历DataContract类

遍历DataContract类
EN

Stack Overflow用户
提问于 2015-10-28 20:37:46
回答 2查看 907关注 0票数 1

我有一个返回Response2的类,它只包含我关心的两个定义:

代码语言:javascript
复制
Response3.Id
Response3.Name

但是,这个数据作为一个列表返回,b/c我的类定义如下所示:

代码语言:javascript
复制
[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; }
}

现在我有一个字符串列表要迭代,但是当我尝试执行以下操作时:

代码语言:javascript
复制
Response2 propResponse2 = MakeRequest2(propertyRequest2, sfToken);

foreach (string strId in propResponse2)
{
    System.Windows.Forms.MessageBox.Show(strId.Name)
}

我收到一个错误声明:

foreach语句不能对“Response2”类型的变量进行操作,因为“Response2”不包含“GetEnumerator”的公共定义

我假设这意味着我需要在类中添加一些东西到DataContract中,但是我不知道在哪里这样做才能正确地迭代。

有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 20:44:53

代码语言:javascript
复制
foreach (var resp3 in propResponse2.r3entry)
{
    System.Windows.Forms.MessageBox.Show(resp3.strName)
}
票数 2
EN

Stack Overflow用户

发布于 2015-10-28 20:47:39

要做你想做的事情(如果这确实是你想要的),你需要使用reflection

代码语言:javascript
复制
        foreach (var field in propResponse2.GetType().GetFields())
        {
            System.Windows.Forms.MessageBox.Show(field.GetValue(propResponse2).ToString());
        }

另一方面,如果您想从所有字段获取所有DataContract属性,那么:

代码语言:javascript
复制
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);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33401170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档