0
Если у меня есть список информации о свойствах и экземпляр объекта, из которого они произошли, как я могу создать другой объект, содержащий эти свойства и значения?Динамически добавлять свойства `dynamic` type
например.
public dynamic Sanitize<T>(T o)
{
if (ReferenceEquals(o, null))
{
return null;
}
var type = o.GetType();
var propertyInfos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
dynamic sanitized = new ExpandoObject();
foreach (var propertyInfo in propertyInfos)
{
var name = propertyInfo.Name;
var value = propertyInfo.GetValue(o, null);
// Add this property to `sanitized`
}
return sanitized;
}
Как ссылаются свойства от этого? 'sanitizedType.PublicBoolTrue' и' sanitizedType ["PublicBoolTrue"] 'оба выдают исключения. – BanksySan
Где вам нужно ссылаться на эти свойства? Внутри метода? Я бы предпочел разделить это на два метода. Первый будет заполнять ExpandoObject словарем, как показано в моем ответе, а затем вызвать метод, после чего вы сможете ссылаться на те свойства, которые вы указали при условии, что вы сохранили результат этого вызова метода в переменной динамического типа , В противном случае, если вам нужно ссылаться на свойство внутри того же метода, вы можете использовать 'sanitized [" PublicBoolTrue "]'. –
Целью является регистрация. Входной объект 'o' может иметь свойства, связанные с' [NotLoggable] ', поэтому этот метод должен возвращать объект, содержащий только общедоступные свойства« loggable ». – BanksySan