Что такое эквивалентный метод для `GetCustomAttributes` для .NETCore(Windows 8 Framework)?
Я собираю приложение, которое взаимодействует со Stack API и отслеживает этот учебник (хотя старая версия API все еще работает). Моя проблема заключается в том, что при использовании этого в приложении для хранилища Windows 8 меня не устраивает .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 Store?
Ответы
Ответ 1
Вам нужно использовать type.GetTypeInfo()
, который затем имеет различные методы GetCustomAttribute
(через методы расширения), или есть .CustomAttributes
, который дает вам необработанную информацию (а не материализованные экземпляры Attribute
).
Например:
var attribute = type.GetTypeInfo().GetCustomAttribute<WrapperObjectAttribute>();
if(attribute == null)
{
...
}
...
GetTypeInfo()
является болью .NETCore для авторов библиотеки; p
Если .GetTypeInfo()
не появляется, добавьте директиву using System.Reflection;
.
Ответ 2
Добавьте в свой проект самодельный пакет System.Reflection.TypeExtensions; он имеет расширение GetCustomAttributes.
(для VS 2017) что-то вроде этого.
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.6'">
<PackageReference Include="System.Reflection.TypeExtensions">
<Version>4.3.0</Version>
</PackageReference>
</ItemGroup>