私が何をしたいされています。今、私は手動で私のオブジェクトの各プロパティを変換する必要があり、新たなプロパティが追加されたとき、私は変換方法を行くことを覚えておく必要がありインターフェイスの派生型を変換する方法は?ここのために最も最も単純で
interface InterfaceA
{
string var1 { get; set; }
string var2 { get; set; }
}
public class DerivedA : InterfaceA
{
public string var1 { get; set; }
public string var2 { get; set; }
}
public class DerivedB : InterfaceA
{
public string var1 { get; set; }
public string var2 { get; set; }
}
public class DoEverything
{
InterfaceA A = new DerivedA();
InterfaceA B = new DerivedB();
A.var1 = "Test1";
A.var2 = "Test2";
B = ConvertObject<DerivedB>(A);
write(B.var1 + ", " + B.var2);
// This doesn't work, I would like it to though.
public T ConvertObject<T>(object obj)
{
T result = (T)typeof(T).GetConstructor(new Type[] { }).Invoke(new object[] { });
foreach (PropertyInfo propertyInfo in obj.GetType().GetProperties())
{
if (propertyInfo.CanRead)
{
try
{
object value = propertyInfo.GetValue(obj, null);
propertyInfo.SetValue(result, value, null);
}
catch { }
}
}
return result;
}
}
それを追加します。私はこれが自動的に行われることを好むでしょう。
ご協力いただければ幸いです。
ありがとうございました
この理由は、私のビジネス層は、単に一般的なダミーのクラスを持っていますインターフェイスの各プロパティを取得および設定します。私の実際のクラスはビジネスレイヤーからアクセスできない。私は実際のクラスをシリアル化し、計算のためにWebサービスに送る必要があります。私はインターフェイスをシリアル化することはできませんし、元のクラスは私のビジネスレイヤーに実装されていませんが、私を挫折させる理由から私は制御できません。だから、元のクラスをダミークラスに変換してからシリアル化する必要があります。インターフェイスタイプを取るコンストラクタを追加することは、私が簡単に...できるので役に立ちません。 – ClaytonHunt
クラスをDerivedB B = new DerivedB(){blah = A.blah、etc ...}として宣言してください。 AからBへ – ClaytonHunt
既知のインターフェイスで作業しているので、これは簡単な答えです。あなたのダミークラスは、FromAメソッドとToAメソッドを実装しています。そのうちのeaxhは、InterfaceAを単一の引数として取ります。 FromAはargからプロパティ値を取得し、ToAはその逆を行います。 InterfaceAが何であるか知っていれば、リフレクションは必要ありません。 –