Итак, у меня есть 2 класса, оба имеют одинаковые имена свойств. Один класс содержит разные переменные: int
, strings
, bool
и DateTime
Второй класс содержит только 1 int
, а остальное все строки.Объект не соответствует типу цели PropertyInfo SetValue - один класс другому
Теперь я хочу перебрать все свойства, получить значение из класса 1, зашифровать эти данные и сохранить его как строку в obj2, а затем вернуть его в основную форму (чтобы сохранить ее в базе данных позже).
public PersoonEncrypted EncryptPersonClass(Class1 object1)
{
PersoonEncrypted persEncrypt = new PersoonEncrypted(); //second class obj
Type type = object1.GetType();
PropertyInfo[] properties = type.GetProperties();
Type type2 = persEncrypt.GetType();
PropertyInfo[] properties2 = type.GetProperties();
foreach (var bothProperties in properties.Zip(properties2, (obj1, obj2) => new { Obj1 = obj1, Obj2 = obj2 }))
{
string value = "";
value = bothProperties.Obj1.GetValue(object1) as string;
if (!string.IsNullOrWhiteSpace(value))
{
string encryptValue = Encrypt(value);
if ((bothProperties.Obj2 != null) && (bothProperties.Obj2.PropertyType == typeof(string)))
{ //!= null check has no effect at all
bothProperties.Obj2.SetValue(persEncrypt, encryptValue, null); //errorLine
}
}
}
return persEncrypt;
}
Это то, к чему я пришел до сих пор. Я, конечно же, искал другие решения like this one. Это, после внесения каких-либо собственных изменений, не возвратило никаких ошибок, но не сохранил зашифрованные строки в классе persEncrypt
. Я пришел к выводу, что из этого теста было проверено, было ли значение во втором классе (persEncrypt
в моем примере) из определенного свойства равным нулю, в то время как оно не должно этого делать, оно должно создать новый экземпляр этого переменную и сохранить ее в классе объекта, но удаление этой проверки дало мне ту же ошибку.
Я проверю метод соединения завтра, выглядит как хорошее решение, если оно работает, чем я предоставил ответ, если кто-то еще не достаточно быстро за это время. – CularBytes