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));