2017-01-16 2 views
1

OpenGraph .NET Parser를 작성하지만 속성 바인딩에 걸렸습니다. 간단히 HTML 문서를 가져 와서 HtmlAgilityPack을 사용하여 파싱합니다.C# 사용자 지정 속성 특성 반영

사용자 정의

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

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

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

컨테이너 클래스 속성 : 그 후 나는 키 특정 OpenGraph 각 노드를 확인하려면

그러나 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");