2017-01-16 7 views
1

Построение OpenGraph .NET Parser, но застревание в привязке к свойствам. Я просто получаю HTML-документ и разбираю его с помощью HtmlAgilityPack. После этого я хочу, чтобы проверить каждый узел для конкретного OpenGraph Key:C# Пользовательское свойство Attribute Reflection

Custom Attribute

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

Parser

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.DefaultUrl с соответствующим значением имени настраиваемого атрибута. Как это может быть сделано?

Спасибо за любую помощь.

ответ

3

Используйте prop.GetValue(result) чтобы получить информацию о стоимости недвижимости.

0

Спасибо. Сеттер может быть отражен следующим образом:

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