Il webservice del nostro fornitore sta restituendo gli oggetti indirizzo (~ 30 campi) e sto usando LINQ e reflection per archiviare i dati restituiti direttamente nel databse. I loop sugli attributi e imposta il valore dall'oggetto alla classe LINQ.
Sono abbastanza nuovo per il refection e sono preoccupato che questa possa essere una cattiva pratica; salva ~ 30 righe di codice in 3 o 4 metodi, ma temo che possa introdurre dei bug difficili da correggere.
EDIT Ecco il codice. L'obiettivo è normalmente un'entità LINQ to SQL e l'input sarebbe un oggetto webservice.
public static void SetValues(object target, object input)
{
Type targetType = target.GetType();
Type inputType = input.GetType();
PropertyDescriptorCollection inputProperties = TypeDescriptor.GetProperties(inputType);
PropertyDescriptorCollection targetProperties = TypeDescriptor.GetProperties(targetType);
foreach (PropertyDescriptor p in inputProperties)
{
object value = p.GetValue(input);
var t = targetProperties.Find(p.Name, false);
if (t != null && value != null)
{
if (value.GetType() == typeof(string) || value.GetType() == typeof(Int64) || value.GetType() == typeof(int) || value.GetType() == typeof(Boolean))
{
t.SetValue(target, value);
}
else if (value.GetType() == typeof(DateTime) || value.GetType() == typeof(DateTime?))
{
if ((DateTime)value > DateTime.MinValue)
{
t.SetValue(target, value);
}
}
else
{
t.SetValue(target, value.ToString());
}
}
}