2017-01-16 6 views
1

Erstellen eines OpenGraph .NET-Parsers, jedoch fest in der Eigenschaftsbindung. Ich hole einfach das HTML-Dokument und parse es mit HtmlAgilityPack. Danach möchte ich jeden Knoten für die spezifische OpenGraph Key überprüfen:C# Eigenschaftseigenschaft Attribut Reflektion

Custom Attribute

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

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

Container Klasse

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

Aber steckte bei der result.Parameter Bindung. Ich muss result.DefaultUrl mit dem entsprechenden benutzerdefinierten Attributnamen zuweisen. Wie kann das gemacht werden?

Danke für jede Hilfe.

Antwort

3

Verwenden Sie prop.GetValue(result), um den Eigenschaftswert abzurufen.

0

Danke. Der Setzer kann wie folgt reflektiert werden:

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