2017-01-16 232 views
1

构建一个OpenGraph .NET分析器,但卡在属性绑定中。我简单地获取HTML文档并使用HtmlAgilityPack解析它。从那以后,我要检查每个节点的具体OpenGraph重点:C#自定义属性属性反射

自定义属性

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分配相应的自定义属性名称值。如何才能做到这一点?

感谢您的任何帮助。

回答

3

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

0

谢谢。二传手可以反映如下:

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