.NETCore(Windows 8 Framework)的“GetCustomAttributes”的等效方法是啥?
Posted
技术标签:
【中文标题】.NETCore(Windows 8 Framework)的“GetCustomAttributes”的等效方法是啥?【英文标题】:What is an equivalent method to `GetCustomAttributes` for .NETCore (Windows 8 Framework)?.NETCore(Windows 8 Framework)的“GetCustomAttributes”的等效方法是什么? 【发布时间】:2012-09-30 15:38:15 【问题描述】:我正在制作一个与 Stack API 交互的应用程序,并且一直在关注 this tutorial(尽管旧的 API 版本仍然有效)。我的问题是,在 Windows 8 Store App 中使用它时,我受到 .NETCore 框架的限制,它不支持下面的 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 应用商店应用领域的限制内是否有与此方法等效的方法?
【问题讨论】:
【参考方案1】:您需要使用type.GetTypeInfo()
,它有各种GetCustomAttribute
方法(通过扩展方法),或者有.CustomAttributes
为您提供原始信息(而不是具体化的Attribute
实例)。
例如:
var attribute = type.GetTypeInfo().GetCustomAttribute<WrapperObjectAttribute>();
if(attribute == null)
...
...
GetTypeInfo()
是 .NETCore 库作者的痛点;p
如果.GetTypeInfo()
没有出现,则添加using System.Reflection;
指令。
【讨论】:
我花了大约两个小时试图找到这个。应该早点问:P @KronoS 嘿;我有幸转换了一个广泛使用反射的现有库......我和 .NETCore 现在彼此非常了解,而且不是很好。如果您进行大量反思,这只是冰山一角;p 在 .NetCore(使用 xproj)上添加一件事,TypeInfo 扩展位于“System.Reflection.Extensions”包中:“dotnet5.4”:“dependencies”:“System.Reflection .Extensions": "4.0.1-beta-23516" 【参考方案2】:将 System.Reflection.TypeExtensions 块添加到您的项目中;它有 GetCustomAttributes 扩展。
(对于 VS 2017)类似这样的东西。
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'">
<PackageReference Include="System.Reflection.TypeExtensions">
<Version>4.3.0</Version>
</PackageReference>
</ItemGroup>
【讨论】:
以上是关于.NETCore(Windows 8 Framework)的“GetCustomAttributes”的等效方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
.NetCore + Docker在Windows系统中的安装与部署
.NetCore 项目加载在 Windows 上的 JetBrains Rider 中失败
netcore开发windows普通服务(非Web)并一键发布到服务器
Uncaught InvalidArgumentException: Please provide a valid cache path. in /apps/vendor/laravel/framew
windows环境jenkins安装 自动编译 publish over ssh 远程发布.netcore webapi 服务化.netcore webapi