C#自定义属性属性反射

时间:2017-01-16 10:14:45

标签: c# .net reflection properties

构建OpenGraph .NET Parser但卡在属性绑定中。我简单地获取HTML文档并使用HtmlAgilityPack解析它。之后,我想检查每个节点的特定OpenGraph密钥:

自定义属性

public class OpenGraphAttribute : Attribute
{
    public string Name { get; set; }

    public OpenGraphAttribute(string name)
    {
        Name = name;
    }
}

容器类

public class OGVideoContainer
{
    [OpenGraphAttribute("og:video:url")]
    public string DefaultUrl { get; set; }

    [OpenGraphAttribute("og:video:secure_url")]
    public string SecureUrl { get; set; }

    [OpenGraphAttribute("og:video:type")]
    public string Type { get; set; }

    [OpenGraphAttribute("og:video:width")]
    public string Width { get; set; }

    [OpenGraphAttribute("og:video:height")]
    public string Height { get; set; }

    [OpenGraphAttribute("og:video:url")]
    public string Url { get; set; }
}

分析器

 public OGVideoContainer ParseVideo(HtmlDocument doc)
 {
     var result = new OGVideoContainer();
     var parseableAttr = typeof(OGVideoContainer).GetProperties();
     foreach (var prop in parseableAttr)
     {
        var ca = prop.GetCustomAttributes(true).ElementAtOrDefault(0) as OpenGraphAttribute;
        if (doc.DocumentNode.SelectSingleNode(String.Format("/html/head/meta[@property='{0}']", ca.Name)) != null)
        {
            // i am stuck here how can i access the result.propery value?
        }
    }

    return result;
}

但坚持使用result.parameter绑定。我必须为result.DefaultUrl分配相应的自定义属性名称值。怎么办呢?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

使用prop.GetValue(result)获取属性值。

答案 1 :(得分:0)

感谢。 Setter可以反映如下:

        var targets = result.GetType().GetProperties();   
        targets.FirstOrDefault(m => m.Name == prop.Name).SetValue(result, "Nice String here");