2012-10-10 5 views
32

Ich stelle eine App zusammen, die eine Schnittstelle mit der Stack-API hat und die this tutorial verfolgt hat (obwohl die alte API-Version immer noch funktioniert). Mein Problem ist, dass, wenn in der Windows 8 Store-App mit diesem Ich bin von der .NETCore Rahmen contrained, die nicht die GetCustomAttributes Methode unten gefunden unterstützt:Was ist eine äquivalente Methode zu "GetCustomAttributes" für .NETCore (Windows 8 Framework)?

private static IEnumerable<T> ParseJson<T>(string json) where T : class, new() 
    { 
     var type = typeof (T); 
     var attribute = type.GetCustomAttributes(typeof (WrapperObjectAttribute), false).SingleOrDefault() as WrapperObjectAttribute; 
     if (attribute == null) 
     { 
      throw new InvalidOperationException(
       String.Format("{0} type must be decorated with a WrapperObjectAttribute.", type.Name)); 
     } 

     var jobject = JObject.Parse(json); 
     var collection = JsonConvert.DeserializeObject<List<T>>(jobject[attribute.WrapperObject].ToString()); 
     return collection; 
    } 

Meine Frage ist zweifach. Was genau macht die GetCustomAttributes und gibt es eine Entsprechung zu dieser Methode innerhalb der Einschränkungen von Windows 8 Store App Realm?

Antwort

58

Sie müssen type.GetTypeInfo(), verwenden, die dann verschiedene GetCustomAttribute Methoden (über Erweiterungsmethoden) hat, oder es gibt .CustomAttributes, die Ihnen die Rohinformationen gibt (statt Attribute Instanzen materialisiert).

Zum Beispiel:

var attribute = type.GetTypeInfo().GetCustomAttribute<WrapperObjectAttribute>(); 
if(attribute == null) 
{ 
    ... 
} 
... 

GetTypeInfo() ist der Schmerz der .NETCore für Bibliothek Autoren; p

Wenn .GetTypeInfo() nicht erscheint, dann eine using System.Reflection; Richtlinie hinzuzufügen.

+1

Ich verbrachte zwei Stunden damit, diese zu finden. Sollte früher gefragt haben: P – KronoS

+1

@KronoS heh; Ich hatte das Vergnügen, eine existierende Bibliothek zu konvertieren, die ausgiebig Gebrauch von Reflektion gemacht hat ... ich und .NETCore sind jetzt sehr gut miteinander vertraut und nicht auf eine gute Art und Weise. Dies ist nur die Spitze des Eisbergs, wenn Sie viel Reflektion machen, p –

+2

Eine Sache, die hinzugefügt werden soll .NetCore (mit xproj), die TypeInfo-Erweiterungen sind in "System.Reflection.Extensions" -Paket: "dotnet5.4": { "Abhängigkeiten": {"System.Reflection.Extensions": "4.0.1-Beta-23516" } } – Spi

0

Fügen Sie das System.Reflection.TypeExtensions Nugget-Paket zu Ihrem Projekt hinzu; Es verfügt über die GetCustomAttributes-Erweiterung.

(für VS 2017) etwas wie das.

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'"> 
    <PackageReference Include="System.Reflection.TypeExtensions"> 
     <Version>4.3.0</Version> 
    </PackageReference> 
</ItemGroup> 
Verwandte Themen