У меня есть динамический тип в C# (Content, тип, который наследует DynamicObject). Он обертывает внутренний объект JSON, содержащий данные. В TryGetMember Я возвращаю запрошенные свойства из этого внутреннего объекта JSON. Это работает просто отлично в случае простых типов (например, свойство int или string), потому что .Net правильно преобразует эти значения.Преобразование типа свойства DynamicObject на основе ReturnType
Но я хочу, чтобы использовать свойство с более сложными типами:
dynamic content = Content.Load(id);
IEnumerable<Book> bookList = content.Books;
Проблема заключается в том, что в TryGetMember моего класса У меня нет никакого способа знать тип, который я должен преобразовать в (в данном случае IEnumerable Book), потому что binder.ReturnType всегда Объект. Согласно этой статье, это нормальное поведение: Determining the expected type of a DynamicObject member access
Но мне очень сложно поверить: как возможно, что API не дает мне знать тип цели? Таким образом, я должен заставить разработчиков использовать синтаксис метода для определения типа: явно
IEnumerable<Books> bookList = content.Books<IEnumerable<Book>>();
... что это некрасиво и странно.
К сожалению, данные поступают с сервера и являются действительно динамичными. Только вызывающий абонент знает, что определенное свойство является перечислимым для определенного типа. Спасибо за быстрый ответ! –