是否可以获取对象的属性和相关属性?

chu*_*tar 2 c# reflection collections attributes properties

是否可以将属性及其相关属性作为集合或属性集获取?

我正在查看的对象的属性具有在 JSON.NET 中使用的属性,我想找出它们都是什么。之后,我将尝试找出其中哪些不为空。

这是一个示例对象:

[JsonObject]
    public class Conditions
    {
        [JsonProperty("opened_since")]
        public DateTime? OpenedSince { get; set; }
        [JsonProperty("added_until")]
        public DateTime? AddedUntil { get; set; }
        [JsonProperty("opened_until")]
        public DateTime? OpenedUntil { get; set; }
        [JsonProperty("archived_until")]
        public DateTime? ArchivedUntil { get; set;
    }
Run Code Online (Sandbox Code Playgroud)

Bri*_*ers 5

这将为您提供所有属性、它们的属性以及这些属性的参数值(请注意,此解决方案假定您使用的是 .net 框架版本 4.5):

PropertyInfo[] props = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in props)
{
    Console.WriteLine("Property: " + prop.Name);
    foreach (CustomAttributeData att in prop.CustomAttributes)
    {
        Console.WriteLine("\tAttribute: " + att.AttributeType.Name);
        foreach (CustomAttributeTypedArgument arg in att.ConstructorArguments)
        {
            Console.WriteLine("\t\t" + arg.ArgumentType.Name + ": " + arg.Value);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Property: OpenedSince
        Attribute: JsonPropertyAttribute
                String: opened_since
Property: AddedUntil
        Attribute: JsonPropertyAttribute
                String: added_until
Property: OpenedUntil
        Attribute: JsonPropertyAttribute
                String: opened_until
Property: ArchivedUntil
        Attribute: JsonPropertyAttribute
                String: archived_until
Run Code Online (Sandbox Code Playgroud)