Я закончил тем, что создал пользовательский интерфейс для преобразования любого объекта в словарь. Вот текущие реализации, если кому-нибудь когда-нибудь понадобится это.
public interface IHandlebarsContextConverter
{
IDictionary<string, object> Convert(object @object);
}
public class HandlebarsContextConverterFields : IHandlebarsContextConverter
{
public IDictionary<string, object> Convert(object @object)
{
return @object.GetType()
.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.ToDictionary(x => x.Name, x => x.GetValue(@object));
}
}
public class HandlebarsContextConverterProperties : IHandlebarsContextConverter
{
public IDictionary<string, object> Convert(object @object)
{
return @object.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.ToDictionary(x => x.Name, x => x.GetValue(@object, null));
}
}
var converter = new HandlebarsContextConverterMerge(
new HandlebarsContextConverterFields(),
new HandlebarsContextConverterProperties());