Я создаю модульный API, в котором люди могут вносить свой вклад с помощью своих конечных точек, помечая свои методы ресурсов своими пользовательскими атрибутами.Их методы становятся доступными, если я загружаю их dll в свое приложение.Когда запрашивается ресурс, моя программа выбирает сбор данных из созданного ими метода (в своих собственных классах) и применяет к ним сортировку и фильтрацию (возможно, с помощью DynamicLinq) перед отправкой сериализованного ответа в JSON.Все открытые поля (и, возможно, свойства) в этих классах считаются полями в API.
Как вы, возможно, понимаете, я знаю только типы этих классов данных во время выполнения, но я надеялся, что смогу вызвать методы конечной точки и передать возвращаемый IEnumerable<SomeUnknownType>
моему методу фильтрации каким-либо образом.Я все еще немного новичок в дженериках и во внутренней работе C #.
Мои идеи варьировались от чистого размышления, сериализации до JSON в их конце, а затем парсинга строки на моем конце, и теперь дженерики.Нашел этот вопрос: Использование отражения для сериализации файлов , в которых было какое-то «взлом», но я не совсем понял и не смог заставить его работать.
Я получаю только DynamicLinq дляСортировать мои данные, когда коллекции с общим T.
О, и я застрял на .Net 3.5, поэтому нет динамики.
public static void Main(string[] args)
{
//Retrieves MethodInfo from a 'MethodHub' class, collected via Reflection at runtime.
MethodInfo endpointMethod = MethodHub.GetEndpointMethod();
// Invokes EndpointMethod. I know it will return an IEnumerable<T>, where T is unknown.
object requestedList = method.Invoke(null, null);
// The list should be passed to the 'Filter'-method, but it needs to be cast to its actual type first, so...
Filter(requestedList);
}
// This is the method I want to pass the return value 'list' from 'EndpointMethod'
public static void IEnumerable<T> Filter<T>(IEnumerable<T> inputList)
{
// Filtering inputList with DynamicLinq
}
Это в каком-то неизвестном классе.
// This is the 'EndpointMethod'. The type of this IEnumerable<> is known only at runtime.
public static IEnumerable<SomeUnknownType> EndpointMethod()
{
IEnumerable<SomeUnknownType> list = new List<SomeUnknownType>();
return list;
}