Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从对象获取特定属性_C# - Fatal编程技术网

C# 从对象获取特定属性

C# 从对象获取特定属性,c#,C#,我正在填充一个有很多属性的对象,然后我简单地打印它们。填充过程在库中完成,这意味着我无法控制它 var response = await _api.Campaigns.UpdateAsync(campaignId, campaign); return Ok(response); 此响应属于活动类型。在它的所有属性中,有一个叫做链接。我想做的是,我想从response中删除Link属性,然后返回response。但我发现从对象中删除属性是不可能的(如果我错了,请纠正我) 所以我想也许我可以使

我正在填充一个有很多属性的对象,然后我简单地打印它们。填充过程在库中完成,这意味着我无法控制它

var response = await _api.Campaigns.UpdateAsync(campaignId, campaign);  
return Ok(response);
响应
属于
活动
类型。在它的所有属性中,有一个叫做
链接
。我想做的是,我想从
response
中删除
Link
属性,然后返回
response
。但我发现从对象中删除属性是不可能的(如果我错了,请纠正我)

所以我想也许我可以使用foreach循环将所需的属性复制到一个新对象中,然后最终返回它。所以我试过这个

var response = await _api.Campaigns.UpdateAsync(campaignId, campaign);
var result = new Dictionary<string, object>();
foreach (PropertyInfo info in response.GetType().GetProperties())
    result.Add(info.Name, info.GetMethod);
return Ok(result); 
但是输出应该是这样的,

"archive_url": "***",
"long_archive_url": "***",
"content_type": "template",
"create_time": "2018-06-28T15:30:50+06:00",
"delivery_status": {
    "enabled": false,
    "can_cancel": false,
    "status": null,
    "emails_sent": 0,
    "emails_canceled": 0
},
"rss_opts": null,
"social_card": {
    "image_url": "*|BRAND:LOGO|*",
    "description": "",
    "title": ""
},  

那么最好的方法是什么呢?

输出的问题是返回的是
info.GetMethod
,而不是
info.Value(response)
。但是,我建议使用不同的方法仅返回某些属性。使用所需的属性创建新类,并返回该属性。例如:

public class SimpleCampaign
{
    public string ArchiveUrl { set; set; }
    public string LongArchiveUrl { get; set; }
    //etc. choosing only the properties you need
}
然后:

var simpleResponse = new SimpleCampaign
{
    ArchiveUrl = response.ArchiveUrl,
    LongArchiveUrl = response.LongArchiveUrl,
    //etc.
}

return Ok(simpleResponse);
当然,编写代码从一个对象映射到另一个对象是一件痛苦的事情。但也有图书馆提供帮助。我建议使用,这是一个非常容易使用的工具,可以自动完成所有映射。

我想这就是您要找的

foreach (PropertyInfo info in response.GetType().GetProperties())
    result.Add(info.Name, info.GetValue(response));
附言:如果你只想得到公共财产

foreach (PropertyInfo info in response.GetType().GetProperties(BindingFlags.Public))
    result.Add(info.Name, info.GetValue(response));

为什么你不能直接返回
response
而不是使用所有反射代码呢?如果我返回
response
,那么它还包括我不想要的
链接
属性。我还考虑创建一个重复的
Campaign
类,只使用我想要的属性,然后将
response
复制到该类,但是有很多函数可以执行这种操作。因此,我试图避免这种技术,并试图找到一种更好、更简单的技术。
foreach (PropertyInfo info in response.GetType().GetProperties(BindingFlags.Public))
    result.Add(info.Name, info.GetValue(response));