37

Stack APIとインターフェイスするアプリをまとめており、このチュートリアルに従っています(ただし、古いAPIバージョンでも機能します)。私の問題は、Windows 8ストアアプリ内でこれを使用すると、GetCustomAttributes以下の方法をサポートしていない.NETCoreフレームワークに制約されることです。

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

私の質問は2つあります。正確には何GetCustomAttributesをしますか?Windows 8ストアアプリレルムの制約内でこのメソッドに相当するものはありますか?

4

2 に答える 2

67

を使用する必要があり、これには(拡張メソッドを介しtype.GetTypeInfo()て)さまざまなメソッドがあるか、(具体化されたインスタンスではなく)生の情報を提供するものがあります。GetCustomAttribute.CustomAttributesAttribute

例えば:

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

GetTypeInfo()ライブラリ作成者にとって.NETCoreの苦痛です;p

.GetTypeInfo()表示されない場合は、using System.Reflection;ディレクティブを追加します。

于 2012-10-10T08:16:37.387 に答える