Краткое описание: Мне нужно продезинфицировать текст до его сохранения в базе данных. У нас есть проект, содержащий все модели, которые используются в нашем приложении MVC. Существует метод Save(T record)
, который сохраняет объект в базе данных. То, что мне было предложено сделать, - это очистить каждое свойство строки типа входящего объекта, прежде чем сохранять его в базе данных. Однако есть проблема: Как очистить свойства свойства настраиваемого типа данных от входящего объекта?Получить свойства свойства пользовательского типа данных с отражением C#
Длинное описание: Скажем, у меня есть класс, типа адреса и класс типа Человека, который имеет свойство типа Адрес:
public class Address
{
public string StreetName { get; set; }
public string City { get; set; }
public int StreetNumber { get; set; }
}
public class Person
{
public string PersonName { get; set; }
public Address HomeAddress { get; set; }
}
Прежде чем я использовал этот общий метод для получения свойств тип строки:
public static void SanitizeObject<TEntity>(TEntity record)
{
var props =
record.GetType().GetProperties()
.Where(x => x.CanRead && x.CanWrite)
.Where(x => x.PropertyType == typeof (string));
foreach (var property in props)
{
string value = Convert.ToString(record.GetPropertyValue(property.Name));
if (!string.IsNullOrEmpty(value))
{
value = Sanitize(value);
record.SetPropertyValue(property.Name, value);
}
}
}
в таком случае я санитарной обработки только Person.PersonName
, однако, мне нужно дезинфицировать также Address.StreetName
и Address.City
Есть ли способ написать это выражение лямбда, чтобы также получить свойства дочерней строки типа string? Как я должен выполнить это, чтобы получить все свойства строки типа, чтобы я мог их дезинфицировать?
Вы пробовали что-нибудь? Я имею в виду, ваш объект санитации вы можете разбить на строки и объекты, а затем вызвать тот же метод на любых объектах, которые содержит ваш класс. – Hammerstein
, даже если вы пишете лямбду, которая это делает. Вы должны спросить себя, может ли это быть прочитано кем-то? –
Хаммерштейн, ты прав! Думаю, я должен это сделать! Спасибо! – John