37

我正在整理一个与 Stack API 接口的应用程序,并且一直在关注本教程(尽管旧 API 版本仍然有效)。我的问题是,在 Windows 8 Store App 中使用它时,我受到不支持以下方法的 .NETCore Framework 的限制GetCustomAttributes

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

我的问题有两个。GetCustomAttributes在 Windows 8 应用商店应用领域的约束下,究竟该做什么以及是否有与此方法等效的方法?

4

2 回答 2

67

您需要使用type.GetTypeInfo(),然后它有各种GetCustomAttribute方法(通过扩展方法),或者有.CustomAttributes它为您提供原始信息(而不是物化Attribute实例)。

例如:

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

GetTypeInfo()对图书馆作者来说是 .NETCore 的痛苦;p

如果.GetTypeInfo()没有出现,则添加using System.Reflection;指令。

于 2012-10-10T08:16:37.387 回答
1

System.Reflection.TypeExtensions块包添加到您的项目中;它有 GetCustomAttributes 扩展。

(对于 VS 2017)是这样的。

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'">
    <PackageReference Include="System.Reflection.TypeExtensions">
        <Version>4.3.0</Version>
    </PackageReference>
</ItemGroup>
于 2017-02-18T12:57:53.750 回答