Это похоже на хороший вариант использования для AutoMapper .
Начните с инициализации отображений между вашими классами.
Mapper.Initialize(cfg => {
cfg.CreateMap<DataInput, Class1>();
cfg.CreateMap<DataInput, Class2>();
// etc.
});
Примечание. Возможно, вам понадобится создать несколько пользовательских отображений , таких как проекции , поскольку похоже, что типы полей не всегда совпадают.
Затем вы можете использовать методы Mapper.Map:
public object Convert(DataInput ratCommon, Type type1) => Mapper.Map(foo, typeof(DataInput), type1);
Или, если во время компиляции известен type1
, вы можете получить безопасность типов с помощью обобщений:
public T Convert<T>(DataInput ratCommon) => Mapper.Map<T>(foo);